java面向对象高级泛型与list,set,Map

时间:2022-02-16 22:24:28

泛型

泛型,即 “参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。

参数化类型:就是将类型由原来具体的类型参数化,类似于方法中的变量参数,此时类型也可以定义成参数形式(可以称之为类型参数),然后在使用/调用时传入具体的类型(类型实参)

java面向对象高级泛型与list,set,Map

数据结构和算法简介

数据结构概念

数据的逻辑结构和存储结构及运算

逻辑结构

数据元素和元素之间的关系(面向问题,针对具体问题,为了解决某个问题)

集合

线性(一对一)

树(一对多)

图(多对多)

java面向对象高级泛型与list,set,Map

物理结构

数据的逻辑结构在计算机的存储形式(面向计算机)

顺序存储结构        

链式存储结构       

索引存储            

散列存储(Hash   

 

程序 =数据结构 + 算法

算法

 概念:

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

算法特点

输入输出

打印输出或者返回一个或多个值

有穷性

避免死循环,并不是纯数学意义的,而是在实际应用中合理的,可以接受的有边界

确定性

每一步都需要有确定的含义

可行性

算法设计的要求

正确性

可读性

       写代码的目的:1,计算机执行。2,方便他人阅读,方便自己日后维护

健壮性

对输入数据不合法 情况做合适的处理

最优算法

时间效率高和存储量低(用最少的钱和时间办最大的事)

集合介绍

集合是java对数据结构及算法的封装

概念

现实生活中:很多事物凑在一起

数学中的集合:具有共同属性的事物的总体

Java中的集合类:

是一种工具类,就像是容器,存储任意数量的具有共同属性的对象。

java集合主要分类三种类型:

Set(集)

List(列表)

Map(映射)

集合的作用

在类的内部,对数据进行组织

简单而快速的搜索大量的条目

有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素。

有的集合接口,提供了映射关系,可以通过key 去快速查找唯一对象,而这个关键字可以是任意类型。

java面向对象高级泛型与list,set,Map

集合和数组的区别

数组的长度固定,集合长度可变

数组只能通过下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象,集合只能存放引用数据类型,不能存放基本数据类型。

Collection

Collection接口是list,set接口父接口,定义了可用于操作ListSet的方法增删改查

List

List是元素有序并且可以重复的集合,被称为序列

List可以精确的控制每个元素的插入位置,或删除某个位置元素

ArrayList. LinkedList是list的两个实现类

 

LinkedList与ArrayList对比

相同点:

方法相同,方法运行结果相同(方法体不同)

元素顺序操作相同

同一个元素可以加入多次

线程不安全

区别:

ArrayList底层是数组,适于查询。

LinkedList底层是双向链表,适合删除与插入,线程不安全。

ArrayList中常用方法

java面向对象高级泛型与list,set,Map

对List的遍历有三种

For循环

Foreach

Iterator

java面向对象高级泛型与list,set,Map

集合Set

Set父接口为Collection,很多方法是继承过来的,所有很多方法与List相同 
它不允许出现重复元素 
不保证集合中元素的顺序 
允许包含值为null的元素,但最多只能有一个null元素 
HashSet、TreeSet是Set的两个实现类, 两个类的方法相同,但是方法运行后结果有的不同

  • HashSet和TreeSet对比

相同点

没有下标 
不可手动排序 
元素顺序与加入顺序无关 
同一个元素不可加入多次 
遍历方式相同

不同点

HashSet:元素顺序不可测,与数学上元素集合概念相同 
TreeSet:元素顺序与元素的排序规则有关 
HashSet对元素无要求,而TreeSet对元素有要求,即要求元素必须有排序规则。 
元素排序规则与List中元素排序规则是相同的 
HashSet:底层是算法是Hash算法:所以查询速度快,但是没有ArrayList快 
TreeSet:底层算法是树: 查询慢,插入快些。

  • HashSet相关操作

创建

 HashSet<String> set = new HashSet<String>();

长度

set.size();

添加

String s = "a";
set.add(s);

删除

set.remove(s);

清空

set.clear();
  • 遍历Set

foreach 
iterator

集合Map

Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value。 
键(key值)不可重复,value值可以 
每个键最多只能映射到一个值 
Map支持泛型,形式如:Map<K,V>

  • HashMap与TreeMap对比

相同点:

方法相同(但方法运行后结果可能不同) 
元素是键值对 
没有下标 
不可手动排序 
元素顺序与加入顺序无关 
同一个元素不可加入多次,键相同则认为是同一元素,与值无关

不同点

HashMap:元素顺序不可测 
TreeMap:元素顺序与元素的键的排序规则有关 
HashMap对元素无要求,而TreeMap对元素的键有要求,即要求元素的键必须有排序规则 
HashMap:底层是算法是Hash算法:所以查询速度快,但是没有ArrayList快 
TreeMap:底层算法是树: 查询慢,插入快些

  • HashMap的相关操作

创建

HashMap<String, Book> map = new HashMap<String, Book>();

长度

map.size();

添加

map.put("01", new Book("think in java"));

获取

Book book = map.get("01");

删除

map.remove("01");

清空

map.clear();
*Map遍历有两种方式

foreach

 HashMap<Integer, String> hashmap= new HashMap<Integer, String>();
hashmap.put(1, "一");
hashmap.put(2, "二");
hashmap.put(3, "三");
hashmap.put(4, "四");
for(Map.Entry<Integer, String> me: hashmap.entrySet()) {
//me是存放hashmap中取出的内容,并用Map.Entry<Integer, String> 指定其泛型
System.out.println(me.getKey() + "-->" + me.getKey());
}

Iterator

  TreeMap<Integer, String> tm = new TreeMap<>();
tm.put(1, "a");
tm.put(4, "b");
tm.put(3, "c");

Iterator itMap = tm.entrySet().iterator();
while(itMap.hasNext()){
Map.Entry en = (Map.Entry) itMap.next();
Integer key = (Integer) en.getKey();
String value = en.getValue().toString();
System.out.println(key +" "+value);

}