JAVA-集合学习整理

collection(收藏)
作用:用来处理程序中各种类型的对象集合的。

Iterator 迭代器
在集合框架中,我们可以通过Iterator 容器的迭代器对容器中的元素进行遍历。
所有可以使用Iterator进行迭代的集合,都必须实现Iterable接口。也就是说,实现了Iterable接口的容器具备了可以被迭代的功能。
该接口只有一个方法。iterator()得到当前容器的迭代器的功能。

我们一般把iterator称为集合的标准的迭代方式。
三个方法:
hasNext()
next()
remove()

while (iterator2.hasNext()) {
String value = iterator2.next();
System.out.print(value+”\t”);
}
Collection(收藏、收藏品)有两个子接口
可以保存 重复的、无序的 对象的

List Set

1:List
list.add(“”);//添加
list.remove(“”);//删除
list.clear();//清除
在父接口的功能的基础上,增加了有序(存储的一个位置的 序号 类似数组的下标的意思 )的功能。

List 有两个实现类
1:ArrayList 底层使用数组实现。
优点:根据索引查找元素效率比较高。遍历元素的效率比较高
缺点:因为底层使用数组实现,所以说,删除元素,插入元素,根据内容查找元素效率都偏低。

ArrayList是一个非线程安全的容器类。
默认的构造方法初始容量为10.

2:LinkedList  底层是用链表的数据结构实现。

优点:插入和删除的效率比较高
缺点:遍历的效率就相对比较低了。根据索引查找元素效率相对较低。

LinkedList的执行效率远远高于ArrayList。
容器的选择取决于你的业务的需求,如果只是一些遍历的操作,那么使用ArrayList即可,如果有大量的插入删除的操作,建议使用LinkedList。

2:Set
Set特点:无序,唯一
两个实现的子类:
1:HashSet 底层使用哈希表实现。元素所对应的类 需要重写Object的hashCode 方法。equals 方法。
哈希码用来查找 顺序表的位置。equals 用来判断和已经添加的元素是否相等。如果相等就不添加。实现了元素的唯一性。
HashSet 效率非常的高。
HashSet在遍历的时候添加和遍历输出的顺序不一致。

LinkedHashSet 是HashSet的子类。在原有的基础上增加了一个链表用来维护添加元素的顺序。在遍历的时候添加和遍历输出的顺序一致。

Set 迭代元素的方式?
2种,forEach iterator

TreeSet :底层使用二叉树实现。特点:元素有序(升序)的唯一。
排序的方式有两种:
一种是让元素所对应的类实现Comparable 接口。实现compareTo方法。内部比较器
使用外部比较器 自定义一个外部比较器实现Comparator接口。实例化TreeSet 对象时,指定外部比较器。

map

HashMap 特点:
key 是无序 ,唯一 value :是无序 ,不唯一
所有的key类型,都必须重写 Object 的hashCode()方法 和equals()方法。

读取 删除,插入等操作效率都比较高。

LinkedHashMap:是HashMap的子类。
在原有的基础上,增加了一个链表维护添加的顺序。效率相对于HashMap 有了一定程度的降低。

遍历的顺序和添加的顺序是一致的。

Iterator是迭代器类,而Iterable是接口。
好多类都实现了Iterable接口,这样对象就可以调用iterator()方法。
一般都是结合着用,比如
HashMap类就实现了Iterable接口,而要访问或打印出Map中所有内容时,就可以这样: HashMap hashMap;
Iterator iter = hashMap.iterator();
while(iter.hashNext()) {
String s = iter.next();
}

1:数组和容器的区别
数组:长度固定,只能通过自己实现方法去操作数组。只能通过数组下标访问元素。
容器:可以扩容,封装了大量操作元素的方法。修改的,添加的,插入的删除的,等等。可以通过内容操作容器中的对象。
容器可以帮助我们快速开发,减少开发的时间。

2:Vector 向量 和 ArrayList
相同点:底层都是使用数组实现。
不同点:
1:Vector JDK1.0出现 , ArrayList JDK 1.2出现。
2:Vector 是线程安全的。ArrayList 是非线程安全的。
ArrayList 是重效率,轻安全,是Vector 的替代类。并没有完全替代。
Vector 随着JDK版本的更新,已经做了大量的修改,增加了很多的方法。
现在使用ArrayList 相对比较多。Vector 慢慢的使用的越来越少。

3:Collection 和 Collections的区别
相同点:长得比较相似。
不同点:
Collection 是一个接口,定义了一种类型的容器 ,特点:无序、不唯一。
Collections 是一个类,封装了大量关于操作容器的方法。内部都是静态方法,类似于Arrays 类。工具类。帮助我们更好的操作容器对象。

4:HashTable 和 HashMap 相同点和不同点
相同点:都是对键值对对象进行操作的。使用put get 等方法操作元素。
不同点:HashTable 是jdk1.0出现的。是一个线程安全的容器。 HashMap 是jdk1.2出现。是一个非线程安全的。
HashTable 是一个重安全轻效率的一个容器。。HashMap 重效率轻安全的容器。HashMap的效率高于HashTable。
可以理解为HashMap 是HashTable的替代类。
HashTable 的直接的父类是 Dictionary(字典) 这个类。

HashMap的key 和value 都可以null
HashTable的key 和value 都不能是null

5:ArrayList 和 LinkedList
相同点:都是有顺序的,元素有编号。
不同点:
1:底层实现不同,ArrayList 底层使用数组实现。LinkedList 使用链表实现。
2:ArrayList根据索引查找,或者遍历效率比较高。插入元素(需要移动大量的元素),删除元素(需要移动大量的元素)效率比较低。
LinkedList:根据索引查找效率相对较低。插入元素,删除元素效率比较高。(有实践为证)。

猜你喜欢

转载自blog.csdn.net/qq_37131111/article/details/79677364