java中的集合框架(1)
集合--集中合并数据----文件夹是一个集合的表现【统一管理/处理数据】
框架--jdk提供操作类库
集合框架--jdk提供的对集中合并数据进行统一管理/处理的开发类库。
交由集合统一管理/处理的数据有两种表现形式:
- 单列数据【独立的一个数据--数字,字符串,....】例如:100 ,”hello”
- 键值对数据 【一个数据是由键和建对应的值组成】书的目录就是一种典型的键值对数据【标题:页码】
Jdk提供的处理单列数据的开发类库
1.Collection接口是Jdk提供的处理单列数据的顶级接口。
2.Collection接口的子接口List接口处理有顺序的单列数据。
List接口可以有重复的数据元素,按照顺序区分。
ArrayList类
LinkedList类
3.Collection接口的子接口Set接口处理没有顺序的单列数据。
Set接口不能有重复的数据元素,【重复的元素被视为同一个】
HashSet类
LinkedHashSet类
ArrayList类
- 处理有顺序的单列数据
- 保存数据的存储空间,会自动扩展【注意与数组的区别】
- 可以保存任意数据类型的数据 【注意与数组的区别】
- 数据存储结构是动态数组结构【优势:查询速度快 缺点:添加/删除速度慢】
所属包:java.util
构造方法:
ArrayList() 构造一个初始容量为十的空列表。
ArrayList(Collection c) 将实现Collection接口的集合类转换成ArrayList
ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
例如:
public static void main(String[] args) {
//ArrayList类的构造方法
//创建一个初始容量为10的空ArrayList集合对象
ArrayList list1 = new ArrayList();
//将实现Collection接口的集合类转换成ArrayList
ArrayList list2 = new ArrayList(list1);
//创建一个指定初始容量的空ArrayList集合对象
ArrayList list3 = new ArrayList(30);
//可以有接口回调方式创建集合对象
List list4=new ArrayList();
}
实例方法
add(E e) 将指定的元素追加到此列表的末尾。
clear() 从列表中删除所有元素。
contains(Object o) 如果此列表包含指定的元素,则返回 true 。
get(int index) 返回此列表中指定位置的元素。
indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
isEmpty() 如果此列表不包含元素,则返回 true 。
remove(int index) 删除该列表中指定位置的元素。
remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
size() 返回此列表中的元素数。
toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
Iterator iterator() 以正确的顺序返回该列表中的元素的迭代器接口。【遍历ArrayList中的数据元素】
例如:
//创建一个初始容量为10的空ArrayList集合对象
ArrayList list1 = new ArrayList();
//add(E e) 将指定的元素追加到此列表的末尾。
list1.add("hello");
list1.add(100);
list1.add(true);
list1.add(12.5);
list1.add("hello");
//contains(Object o) 如果此列表包含指定的元素,则返回 true 。
System.out.println("contains==="+list1.contains("hello111"));
//get(int index) 返回此列表中指定位置的元素。
System.out.println("get(1)==="+list1.get(1));
//indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
System.out.println("indexOf('hello') ==="+list1.indexOf("hello"));
//lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
System.out.println("lastIndexOf('hello') ==="+list1.lastIndexOf("hello"));
//isEmpty() 如果此列表不包含元素,则返回 true 。
System.out.println("isEmpty() ==="+list1.isEmpty());
//remove(int index) 删除该列表中指定位置的元素。
//remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
System.out.println("remove() ==="+list1.remove("hello"));
//set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
System.out.println("get(3)==="+list1.get(3));
list1.set(3,"world");
System.out.println("get(3)==="+list1.get(3));
//size() 返回此列表中的元素数。
System.out.println("size==="+list1.size());
ArrayList集合的遍历
1.//普通的for循环
for(int i=0;i<list1.size();i++){
System.out.println("普通的for循环遍历==="+list1.get(i));
}
2.//增强的for循环
for(Object obj:list1){
System.out.println("增强的for循环遍历==="+obj);
}
3.//迭代器遍历集合
//Iterator iterator() 以正确的顺序返回该列表中的元素的迭代器接口。【遍历ArrayList中的数据元素】
Iterator it= list1.iterator();
while(it.hasNext()){
Object obj=it.next();
System.out.println("迭代器遍历集合==="+obj);
}
LinkedList类
1.处理有顺序的单列数据
2.保存数据的存储空间,会自动扩展【注意与数组的区别】
3.可以保存任意数据类型的数据 【注意与数组的区别】
4.数据存储结构是链表【火车】结构【优势:添加/删除速度快 缺点:查询速度慢】
构造方法:
LinkedList() 构造一个空列表。
LinkedList(Collection c) 将实现Collection接口的集合类转换成LinkedList
实例方法:
add(E e) 将指定的元素追加到此列表的末尾。
clear() 从列表中删除所有元素。
contains(Object o) 如果此列表包含指定的元素,则返回 true 。
get(int index) 返回此列表中指定位置的元素。
indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
isEmpty() 如果此列表不包含元素,则返回 true 。
remove(int index) 删除该列表中指定位置的元素。
remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
size() 返回此列表中的元素数。
toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
Iterator iterator() 以正确的顺序返回该列表中的元素的迭代器接口。【遍历ArrayList中的数据元素】
LinkedList类提供了一组针对第一个元素和最后一个元素的操作方法:
addFirst(E e) 在该列表开头插入指定的元素。
addLast(E e) 将指定的元素追加到此列表的末尾
getFirst() 返回此列表中的第一个元素。
getLast() 返回此列表中的最后一个元素。
removeFirst() 从此列表中删除并返回第一个元素。
removeLast() 从此列表中删除并返回最后一个元素。
因为LinkedList类的数据存储结构是链表【火车】结构
HashSet类
- 处理的是没有顺序的单列数据【重复的元素算一个】
- 保存数据的存储空间,会自动扩展。
- 可以保存任意数据类型的数据。
构造方法:
HashSet() 构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
HashSet(Collection c)将实现Collection 接口的集合类转换成HashSet
HashSet(int initialCapacity) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子
实例方法:
add(E e) 将指定的元素添加到此集合。
clear() 从此集合中删除所有元素。
contains(Object o) 如果此集合包含指定的元素,则返回 true 。
isEmpty() 如果此集合不包含元素,则返回 true 。
remove(Object o) 如果存在,则从该集合中删除指定的元素。
size() 返回此集合中的元素数。
iterator() 返回此集合中元素的迭代器。
例如:
public static void main(String[] args) {
//构造方法:
//HashSet() 构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
HashSet set1= new HashSet();
//HashSet(Collection c)将实现Collection 接口的集合类转换成HashSet
ArrayList list=new ArrayList();
HashSet set2=new HashSet(list);
//HashSet(int initialCapacity) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
HashSet set3= new HashSet(30);
//HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的负载因子
HashSet set4= new HashSet(30,0.5f);
//实例方法:
//add(E e) 将指定的元素添加到此集合。
set1.add("hello");
set1.add(100);
set1.add(true);
set1.add(12.5);
set1.add("hello");
//size() 返回此集合中的元素数。
System.out.println("size()=="+set1.size());
//remove(Object o) 如果存在,则从该集合中删除指定的元素。
System.out.println("remove()=="+set1.remove("hello"));
System.out.println("size()=="+set1.size());
//clear() 从此集合中删除所有元素。
//isEmpty() 如果此集合不包含元素,则返回 true 。
//System.out.println("isEmpty()=="+set1.isEmpty());
//set1.clear();
//System.out.println("isEmpty()=="+set1.isEmpty());
//contains(Object o) 如果此集合包含指定的元素,则返回 true 。
//iterator() 返回此集合中元素的迭代器。
//遍历HashSet
//不能直接使用普通的for循环遍历,可以将HashSet集合转换ArrayList集合就可以使用普通的for循环遍历
ArrayList list1=new ArrayList(set1);
for(int i=0;i<list1.size();i++){
System.out.println("普通for循环遍历==="+list1.get(i));
}
//可以使用增强的for循环
for(Object obj:set1){
System.out.println("增强的for循环=="+obj);
}
//通过迭代器遍历
Iterator it=set1.iterator();
while(it.hasNext()){
Object obj=it.next();
System.out.println("迭代器遍历=="+obj);
}
}
LinkedHashSet类
定义结构:
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>,
LinkedHashSet是HashSet类的子类
只要会使用HashSet,那么就一定会使用LinkedHashSet。
构造方法:
LinkedHashSet() 构造一个新的空集合; 背景HashMap实例具有默认初始容量(16)和负载因子(0.75)。
LinkedHashSet(Collection c)将实现Collection 接口的集合类转换成LinkedHashSet
LinkedHashSet(int initialCapacity) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和默认负载因子(0.75)。
LinkedHashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 背景HashMap实例具有指定的初始容量和指定的
实例方法:
add(E e) 将指定的元素添加到此集合。
clear() 从此集合中删除所有元素。
contains(Object o) 如果此集合包含指定的元素,则返回 true 。
isEmpty() 如果此集合不包含元素,则返回 true 。
remove(Object o) 如果存在,则从该集合中删除指定的元素。
size() 返回此集合中的元素数。
iterator() 返回此集合中元素的迭代器。
作业:
- List接口与Set接口的区别?
- ArrayList类与LinkedList类的区别?