(12) 【 集合框架】
集合(容器):一个对象,用来储存其他多个对象
Collection(父接口)---------------------------------------------
特点:元素是Object
实现类:无
方法:
add(Obiect o):确保此collection包含指定的元素(可选操作)
addAll(Collection c):把c中的所有对象放入集合
clear():清空集合
contains(Object o):判读对象o在集合中是否存在
isEmpty():判断集合是否为空
remove(Object o):把对象o从集合中删去
size():返回集合中对象的个数
toArray():把集合转成对象数组
遍历:
for(Object o : c){
System.out.println(o);
}
① List(子接口)
特点:元素有顺序(下标),可以重复
方法:
add(int pos,Object o):把对象o插入到pos位置
get(int pos):返回pos位置的元素
indexOf(Object o):返回对象o在数组中的下标(从前往后找)
lastIndexOf(Object o):返回对象o在数组中的下标(从后往前找
remove(int pos):删除pos位置的元素
set(int pos,Object o):把pos位置的元素替换为o
List遍历
1.for循环变量(下标遍历)
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
//2.for-each 遍历
for(Object o : c){
System.out.println(o);
}
//3.迭代遍历【可以遍历任何Collection】
Iterator it = list.iterator();
while(it.hasNext()){
Object o = it.next();
System.out.println(o);
}
List接口实现类
1.ArrayList 用数组实现List 查询块,增删慢(JDK1.2)轻量级的 线程不安全
2.Vector 用数组实现List 查询快,增删慢(JDK1.0)重量级的 线程安全
3.LinkedList 用链表实现List 查询慢,增删块(JDK1.2)
② Set(子接口)
特点:元素无顺序,不可重复【内容不可重复】
方法:全部继承自Collection接口
Set遍历
for(Object o : set){
System.out.println(o);
}
Set接口实现类
A HashSet
JDK1.2 数组实现 线程不安全
添加元素
a.先获取元素的哈希码
b.通过哈希码计算出下标位置
c.如果该位置没有元素,直接添加,否则通过
d.equals()比较,相同则不添加,否则 则添加
为保证自定义类型元素内容不重复,必须重写 hashCode()~equals()
hashCode()重写要求:
①:内容相同的对象必须返回相同的哈希码
②:内容不同的对象尽可能的返回不同的哈希码
equals() 重写要求 : 保证相同对象返回 true
B LinkedHashSet
JDK1.2 数组+链表实现 线程不安全
为保证自定义类型元素内容不重复,必须重写 hashCode()~equals()
可以保证元素的获取顺序和添加顺序一致!!!
C TreeSet
JDK1.2 红黑树实现 线程不安全
可以对元素进行自动的升序(从小到大)排列
为保证自定义类型元素内容不重复,自定义类型必须实现Comparable接口,提供compareTo方法实现
③ Map(独立的接口)
特点:元素由键值对组成 其中键是唯一的 值是可以重复的
方法:
put(Object k,Object v):把k-v这个键值对放入Map如果k已经存在,那么新的v会替换旧的v
get(Object k):返回Map中k对应的v
remov(Object k):删除以k为键的键值对
size():返回键值对的数量
containsKey(Object k):判断k这个键是否存在
containsValue(Value v):判断v这个值是否存在
A 键遍历
//获取map中所有key组成的set集合
Set<String> set = map.keySet();
//遍历Set集合,获取每一个key,并通过get()获取value
for(String key : set){
String value = map.get(key);
System.out.println(key+"-->"+value);
}
B 值遍历
//获取map中所有value组成的collection集合
Collection<String> c = map.values();
//遍历集合,获取每一个value
for(String value : c){
System.out.println(value);
}
C 键值对遍历
//获取Map中所有键值对(Map.Entry<K,V>)对象组成的Set集合
Set<Map.Entry<String,String>> set = map.entrySet();
//遍历Set集合,获取每一个键值对,调用键值对对象的方法获取key和value
for(Map.Entry<String,String> e : set){
String key = e.getKey();
String value = e.getValue();
System.out.println(key+"-->"+value);
}
D Map实现类
1.HashMap JDK1.2 数组实现 线程不安全
轻量级实现 效率高 允许null键值对
自定义类型做key,自定义类型必须重写hashCode()~equals()
2.LinekedHashMap JDK1.2 链表+数组实现 线程不安全
可以保证键值对的获取顺序和添加顺序一致 轻量级实现 效率高
自定义类型做key,自定义类型必须实现Comparable接口 提供compareTo方法实现
3.TreeMap JDK1.2 红黑树实现 线程不安全 轻量级实现
可以根据key的内容,对键值对进行升序排列 效率高
实现Comparable接口,提供compareTo方法实现
4.Hashtable JDK1.0 数组实现 线程安全 重量级实现
效率低 不允许null键值对
自定义类型做key,重写hashCode()~equals()
5.Properties JDK1.0 数组实现 线程安全 重量级实现
效率低 Hashtable的子类
键和值的类型都是字符串类型,用于读取配置文件信息
上一篇:常用类
[1]:https://blog.csdn.net/qq_42806727/article/details/88947030