一、集合框架
1.概念
二、Collection接口
Collection接口之下有两个子接口:List接口/Set接口
List接口是用来处理有序的单列数据,可以有重复的元素。
Set接口是用来处理无序的单列数据,没有重复的元素,重复的元素算一个
三、List接口
List接口有两个子类:ArrayList类和LinkedList类
1.ArrayList类:
i.用来处理有序的单列数据,可以有重复的元素。
ii.添加的元素会自动扩展。
iii.动态数组结构,查询速度快,添加删除速度慢
构造方法
//ArrayList类是List接口的子类
//ArrayList是处理有序数据列的,可以有重复数据,是动态数组结构,查询速度快,但添加和删除速度慢
//ArrayList的构造方法有三种
//1.ArrayList() 指定一个初始容量为10的空列表
ArrayList arrayList = new ArrayList();
//2.ArrayList(Collection) 将通过Collection实现的子类转换为ArrayList类
LinkedList linkedList = new LinkedList();
ArrayList arrayList1 = new ArrayList(linkedList);
//3.ArrayList(int initialCapacity) 自定义初始容量
ArrayList arrayList2 = new ArrayList(20);
实例方法
//ArrayList常用方法
//1.boolean add(Object obj)向ArrayList中添加元素,添加至末尾
arrayList.add("ceshi");
arrayList.add("9823");
arrayList.add(false);
arrayList.add(823.2);
arrayList.add("kjkasd");
arrayList.add(9823);
//2.boolean contains(Object obj)是否包含指定元素
System.out.println(arrayList.contains(823));
//3.Object get(int index) 获取指定位置的元素值
System.out.println(arrayList.get(3));
//4.int size() 获取列表长度
System.out.println(arrayList.size());
//5.int indexOf(Object obj) 获取第一次出现的位置
System.out.println(arrayList.indexOf("ceshi"));
//6.int lastIndexOf(Object obj) 获取最后一次出现的位置
System.out.println(arrayList.lastIndexOf("kjkasd"));
//7.boolean isEmpty() 查看列表是否为空
System.out.println(arrayList.isEmpty());
//8.Object remove(int index) 根据位置删除元素,返回的是被删除的元素
System.out.println(arrayList.remove(3));
//9.boolean remove(Object obj) 根据元素值删除元素,返回是布尔类型,
//如果有相同的数据,删除的是第一次出现的位置
System.out.println(arrayList.remove("9823"));
System.out.println(arrayList);
//10.Object set(int index,Object obj)修改指定位置的值,返回的是被修改的值
System.out.println(arrayList.set(1,true));
System.out.println(arrayList);
System.out.println("---------------普通for循环-----------------------");
//ArrayList循环
//普通for循环
for (int i=0;i<arrayList.size();i++){
Object object = arrayList.get(i);
System.out.println(object);
}
System.out.println("----------------for循环增强型------------------------");
//for循环增强型
for (Object object:arrayList){
System.out.println(object);
}
System.out.println("-----------------迭代器遍历-----------------------");
//迭代器遍历
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
2.LinkedList类:
i.用来处理有序的单列数据,可以有重复的元素。
ii.添加的元素会自动扩展。
iii.双向链表结构,查询速度慢,添加删除速度快
构造方法
//LinkedHashSet类是HashSet类的子类,是无序的单列数据,没有重复的元素,继承了父类的方法
//LinkedHashSet的构造方法
//LinkedHashSet() 默认创建一个空集合,初始容量为16,负载因子是0.75
LinkedHashSet hashSet = new LinkedHashSet();
//LinkedHashSet(Collection) 将Collection的子类,转化为LinkedHashSet类对象
ArrayList arrayList = new ArrayList();
LinkedHashSet hashSet1 = new LinkedHashSet(arrayList);
//LinkedHashSet(int?initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)
LinkedHashSet hashSet2 = new LinkedHashSet(24);
//LinkedHashSet(int?initialCapacity, float?loadFactor) 具有指定的初始容量和指定的负载因子
LinkedHashSet hashSet3 = new LinkedHashSet(35,0.5f);
实例方法
//HashSet中的方法,没有关于位置的方法,因为是无序的
//1.boolean add(Object obj) 添加元素,返回boolean
hashSet.add("ceshi");
hashSet.add(323);
hashSet.add("test");
hashSet.add("男");
hashSet.add(323);
System.out.println(hashSet);
//2.int size() 返回列表的长度
System.out.println(hashSet.size());
//3.boolean contains(Object obj) 列表中是否包含指定元素
System.out.println(hashSet.contains(323));
//4.boolean isEmpty() 是否为空列表
System.out.println(hashSet.isEmpty());
//5.boolean remove(Object obj) 根据元素值,移除指定元素
System.out.println(hashSet.remove(323));
System.out.println(hashSet);
//循环遍历
//因为没有顺序,也就没有位置,所以普通for无法使用
//增强型for循环
System.out.println("--------------增强型for循环------------");
for (Object object:hashSet){
System.out.println(object);
}
//迭代器循环遍历
System.out.println("--------------迭代器循环遍历------------");
Iterator iterator = hashSet.iterator();
while (iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
四、ArrayList 和 LinkedList 的区别是什么?
相同点
ArrayList 和 LinkedList 都是List接口的子类,间接实现Collection接口 Collection接口处理单列数据的接口,自然ArrayList 和 LinkedList都是处理单列数据的类 |
不同点
ArrayList | LinkedList |
动态数据的存储结构 | 双向链表的存储结构 |
添加/删除数据慢,查询数据快 | 添加/删除快,查询数据慢 |
没有提供对第一个和最后一个元素的操作方法 | 提供对第一个和最后一个元素的操作方法 |
有10个单位的初始容量 | 没有初始容量 |
扩容的步长是0.5倍原容量,扩容方式是利用数组的复制 | 没有扩展机制 |