概念:对象的容器,可以存储多个对象
特点:一个工具类,提供了操作多个对象的方法
位置:java.util包下
Collection体系
Collection根接口
特点:存储多个对象,无序无下标
方法:
boolean add(Object o)
向集合中添加一个对象
boolean remove(Object o)
从集合中一处一个对象
boolean contains(Object o)
判断集合中是否包含某一个元素
int size()
返回集合中有效元素个数
List接口
特点:存储多个对象,有序有下标元素可以重复。
方法:
add(int index,Object o)
在指定位置插入一个元素
remove(int index)
根据下标删除元素
set(int index,Object o)
修改指定下标处的元素
get(int index)
根据下标返回对应的元素
List subList(int start,int end)
返回start(包含) -end(不包含)之间的元素组成的List集合
实现类:
ArrayList
数组实现 查询快,增删慢
JDK 1.2 轻量级,线程不安全,效率高
LinkedList
链表实现 查询慢,增删快
Vectot
数组实现
JDK1.0 重量级 线程安全 效率慢
遍历方式:
1.下标遍历
for(int i=0; i<list.size();i++){
System.out.print(list.get(i)+"\t")
}
System.out.println();
2.for-each遍历
for(Object o:list){
System.out.println(o);
}
注意:如果定义了泛型,则数据类型与泛型类型一致
3.迭代器遍历
a) while循环遍历
Collection coll = new ArrayList();
coll.add("a1")
coll.add("a1")
coll.add("a1")
Iterator it = coll.iteratou();
while(it.hasNext()){
System.out.println(it.next());
}
b) for循环遍历
Collection coll = new ArrayList();
coll.add("a1")
coll.add("a1")
coll.add("a1")
for(Iteratot it = coll.iteratou() ; it.hasNext();){
System.out.println(it.next());
}
泛型集合:类型安全的集合,强制集合中的元素类型一致
List<数据类型> list = new ArrayList<数据类型>();
泛型类
class A<T>{
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
注意:
- A a = new A();
- A a = new A(String);
- 能够在编译时进行检验
- A a = new A<>();
- 通常 T/K/V/E 表示泛型
jdk 1.5 开始 可以定义泛型接口
interface IA<T,K>{
public void ma(T t,K k);
}
Colleations工具类
概念:集合的工具类,定义了操作集合的方法
常用方法:
reverse(List list)
: 将集合的元素进行翻转
shuffle(List list)
: 将集合中元素随机重置
sort(List list)
: 对元素进行自然升序排序
注意:如果集合中的元素为自定义类型,则需要这个自定义的类实现Comparable接口,并且重写compareTo方法
Set接口
特点:存储任意对象类型,无序无下标 元素内容不可重复
方法:Collection接口
Obkect[] toArray();
将集合转换成数组
实现类:
1.Hashset
HashSet如歌保证元素内容不重复
需要重写hashCode和equals方法
hashCode重写原则:将所有的属性计算一个整数进行返回
public int hashCode(){
return name.hashCode()+age+(int)score;
}
2.SortedSet(子接口)
TreeSet:使Set集合中的元素进行升序排序
注意:自定义类型必须实现Comparable接口,以及实现compareTo方法。基于compareTo方法的返回值决定元素内容是否重复(返回值为0时,判断为重复)
3.LinkedHashSet :HashSet的子类,将元素按照存入的顺序排列遍历方式
4.for-each
5.迭代器遍历
Map集合接口
特点:
存储任意对象类型的键值对(key - value)
键:无序无下标元素不可重复
值:无序无下标元素可以重复
方法
boolean containsKey(Object key)
: 判断是否包含此key
boolean containsValue(Object value)
: 判断是否包含此值
put(K key, V value)
: 向Map集合中添加键值对(增),若key已经存在,则更改value(改)。
remove(Object key)
: 根据key删除此键值对
V get(Object key)
: 根据key获取value
int size()
: 返回有效键值对个数
实现类
HashMap:
HashMap如何保证键不重复:重写hashCode 和 equals方法
HashMap: JDK 1.2 线程不安全,效率高;允许用null作为key和value
Hashtable: JDK 1.0 线程安全,效率低;不允许用null作为key和value
Properties : Hashtable的子类。key和value只能是String类型。通常用于配置文件的读取
SortedMap:子接口
TreeMap: 对key进行自然升序排序
注意:若Key是自定义类型,则要求实现Comparable接口和重写compareTo方法
遍历方式:
1.键遍历
Set<String> keys = map.keySet();
for (String key : keys) {
String value = map.get(key);
System.out.println(key+"--"+value);
}
2.值遍历
Collection<String> values = map.values();
for (String value : values) {
System.out.println(value);
}
3.键值对遍历
Set<Entry<String,String>> set = map.entrySet();
for(Entry<String,String> entry:set) {
String key = entry.getKey(); //获取key
String value = entry.getValue(); //获取value
System.out.println(key+"-"+value);
}