容器
- --装其他对象的对象。
- --Collection 所有容器的父类接口。
- --容器里面只放对象类型的引用,不能放基本数据类型。
- java 5 以后,向容器中放基本数据类型时,会引入自动装箱机制,将其自动装箱(auto-boxing),所谓自动装箱就是将基本数据类型处理成对应的包装类型。例如:list.add(1000);<==> list.add(new Interger(1000));
List();
创建 List<String> list = new ArrayList<>(); 使用容器时一定要写上泛型参数。
容器里面只能放对象类型的引用,不能放基本的数据类型。(基本数据的包装类)(List常用的实现类有ArrayList和LinkedList)1、ArrayList();
底层实现是一个数组,使用连续的内存,可以实现随机存取。2、LinkedList();
底层实现是一个双向循环链表,可以使用碎片内存,不能随机存取,但是增删元素需要修改引用即可,所以增删元素有更好的性能。3、用迭代器去遍历对象。
Iterator<String> iterator = list.iterator(); //拿到一个迭代器对象。
while(iterator.hasNext()){
System.out.println(iterator.next());
}4、使用foreach对容器里的元素进行遍历。
list.forEach(System.out::println); //容器元素的遍历 。5、使用foreach加Lambda表达式对容器里的元素进行遍历。
list.forEach(e ->{ //e - 容器内的每一个对象
System.out.println(e.toUpperCase());
}); //forEach 是只读循环。
Set();
- 不存在重复的元素在里面
- 注意:没有get();方法,因为没有有序的排列,无法找出确定的元素。
删除不能给索引,因为是集合,没有按下表存取元素的方法。 - 1、HashSet)();
灰常重要的一点:必须重写 HashCode();和equals();两个方法。使用程序自动产生
好的哈希函数(单向哈希函数):不同的对象尽可能产生不同的哈希码。
如果要使用HashSet那么一定要重写两个方法:
-- HashCode() --->让相同的对象产生相同的哈希码,让不同的对象尽可能产生不同的哈希码。
--equals() --->定义比较两个对象的规则-先比引用、再比类型、其次比属性。(只比相等或不等)
~自反性
~对称性
~传递性
~一致性 - 2、TreeSet();
去重和排序
最好要重写 compareTo();方法。以实现TreeSet();的排序功能。
一种比较的写法:
public int compareTo(student o) {
if (this.name.compareTo(o.name) == 0) {
return this.age - o.age;
}else{
return this.name.compareTo(o.name) ;
} }
Map<k,v>
- K - 此映射所维护的键的类型
V - 映射值的类型 - .put(K key,V value);放东西
.remove(Object Key);删除 - 两个实现的版本
1、HashMap();注意要重写:.HashCode();和.equals();
2、TreeMap();注意可能要重写:comparableTo();
泛型
- 通过<>接受一种引用数据类型,在编译程序时,会使用该类型检查集合中存储的对象是否是该类型,如果不是,不通过。从而把运行时的问题转移到编译时期,提高了程序的安全性。
- 泛型擦除:泛型是用在编译时期的,编译完之后的.class文件中是不存在泛型的。