Java学习第12天
程序员文章站
2022-05-10 11:02:25
...
容器
容器与数组的区别:
- 容器:长度可变,任意数据类型的数据的集合;
- 数组:长度不可变,数据类型需要完全相同,有序,有索引,查找效率较高
集合Collection:
-
成员方法:
*容器可以存储任意类型的数据
*泛型的数据类型只能是引用类型,基本数据类型会发生非自动装箱操作 -
遍历:
*增强 for:因为不存在索引,所以不使用普通 for 遍历。
*迭代器 :Iterator<…> it = new Iterator<>(); -
List接口: 有序的,可重复的
*新增功能:新增关于索引的一些操作的方法
*List接口遍历:
----普通 for;
----for…each;
----迭代器;
public class ListDemo04 {
public static void main(String[] args) {
List<Integer> list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
//普通for
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
//增强for
for(Integer i:list){
System.out.println(i);
}
//迭代器
//1)获取迭代器对象
for(Iterator it=list.iterator();it.hasNext();){
System.out.println(it.next());
}
}
}
LIst接口下的ArrayList:
- 有序且可以重复(此处的重复表示两个变量可以相互equals());
- 底层:数组实现。进行动态扩容,每次使用copyOf方法进行扩容,每次扩容后的容量是之前的1.5倍;
- 优点:随机获取或者遍历效率高;
- 缺点:增删效率低,线程不安全;
Vector:
- 底层:数组实现,使用copyOf方法进行动态扩容,每次扩容后的容量是原容量的2倍,线程安全的,效率低
LinkedList:
- 底层:双向链表实现
- 优点:做增删效率高
- 缺点:查询和遍历效率低
- 新增功能: 新增了一些操作与头部和尾部的方法:
—void addFirst(E e) ,将指定元素插入此列表的开头。
—void addLast(E e) , 将指定元素添加到此列表的结尾。
以上List部分总结:
List | 底层 | 优缺 | 如何选用 |
---|---|---|---|
ArrayList | 数组实现,每次使用copyOf方法进行扩容,每次扩容后的容量是之前的1.5倍 | 随机获取或者遍历效率高;但是增删效率低,线程不安全; | 线程不安全但是查找较多时 |
LinkedList | 双向链表实现 | 增删效率高,查询和遍历效率低 | 线程不安全,增删较多时 |
Vector | 数组实现,使用copyOf方法进行动态扩容,每次扩容后的容量是原容量的2倍 | 线程安全的,效率低 | 线程安全时 |
Set接口:
- 无序的,不可重复
- 放入数据的顺序和内部真实存储的顺序不一致,内部有自己的存储顺序,一旦确定了存储顺序不会发生改变:
Set接口下的TreeSet:
- 底层:红黑树;
- 优点:升序排序
HashSet;
- 底层:哈希表结构(数组+链表+红黑树)
- 优点:查询,添加,删除,修改效率高
- 缺点:无序
- 如果两个对象的hashcode值不相同,两个对象肯定不相同,如果值相同,可能不是相同对象,可以是相同对象
- 对对象类型数据进行去重:要重写hashCode和equals方法
- 先比较hashCode:
----如果值不同,不会调用equals方法
----如果值相同才会调用equals方法
上一篇: 学习python第12天