集合
集合的特点:(与数组的区别)
1.可存放不同数据类型的对象(必须是对象)
数组只能存放同一种类型数据,但是可以存放基本类型数据。
2.集合的长度可以自动增加,数组的长度一旦确定,就不能再改变。
3.集合对象中有许多方法可以直接调用进行元素的操作,数组对象中没有方法可以对数据进项操作。
4.java.util 包中的辅助工具类collections,也能对集合中的元素进行操作,而java.util 包中的辅助类Arrays,是用来对数组中的元素进行操作的。
1.Iterable接口(迭代器)
实现这个接口的集合,都有指定的一个方法
public Iterator iterator();
并且该接口中提供了一个方法可以返回一个迭代器对象,
迭代器(Iterable)对象在这里的作用就是循环遍历集合中的每一个元素。
2.Collection接口
Collection接口继承了Iterable接口。所以也都有获取迭代器的相关方法。
Collection类型集合体系结构中的根接口,JDK中不提供此接口的任何直接实现,而是提供更具体的子接口(List和Set)。
Collection接口中提供了很多集合中通用的方法
例如:
add() 添加
remove() 移除
clear() 清除
size() 大小
…
List接口:
特点:集合中的元素有序且可重复
注:有序指的是元素放到集合中的顺序和循环遍历出来的顺序一致
List接口常见的实现类有:ArrayList、LinkedList、Vector等
集合遍历的方式
1.通用方式: 使用集合中提供的迭代器
List c = new ArrayList();
//调用add方法存数据
Iterator iterator = c.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
}
2.List集合的特有方式:get方法通过下标访问元素
List list = new ArrayList();
//调用add方法存数据
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
3.foreach循环(增强for循环)
注:JDK5.0版本及以上可用
List list = new ArrayList();
//调用add方法存数据
//自动遍历集合c中的元素,并且每次使用变量o来接收
for(Object obj:list){
System.out.println(obj);
}
4.JDK1.8版本以上可使用
List list = new ArrayList();
list.forEach(obj->System.out.println(obj));
Set接口
Set类型集合特点:
集合中的元素不可重复,有没有序要看Set接口具体的实现类是谁。
Set接口常见的实现类有:
HashSet,LinkedHashSet
HashSet集合中元素的特点:无序不可重复
LinkedHashSet集合中元素的特点:有序不可重复
集合遍历的方式
1.通用方式: 使用集合中提供的迭代器
Set set= new HashSet();
//调用add方法存数据
Iterator iterator = set.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
}
2.foreach循环(增强for循环)
Set set= new HashSet;
//调用add方法存数据
//自动遍历集合set中的元素,并且每次使用变量obj来接收
for(Object obj:set){
System.out.println(obj);
}
3.JDK1.8版本以上可使用
Set set= new HashSet();
list.forEach(obj->System.out.println(obj));
4.SortedSet接口和TreeSet 类
SortedSet接口是Set接口的子接口,除了拥有Set集合的一些基本特点之外,还提供了排序的功能。
TreeSet类就是Sort额的Set接口的实现类
5.TreeSet类的排序功能
注:TreeSet排序永远都是从小到大进行排序,但是谁大谁小是我们的方法控制。
自然排序
//java.lang.Comparable接口
//例如:
public class Student implements Comparable{
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int compareTo(Object o) {
Student s = (Student)o;
if(this.id<s.id){
return -1;
}
else if(this.id>s.id){
return 1;
}
return 0;
}
}
注意:
s1.compareTo(s2);
返回正数说明s1大
返回负数说明s1小
返回0说明s1和s2相等
比较器排序
Set set = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Comparable c1 = (Comparable) o1;
Comparable c2 = (Comparable) o2;
return c1.compareTo(c2);
}
});
注意:
c1.compareTo(c2);
返回正数说明s1大
返回负数说明s1小
返回0说明s1和s2相等
6.Collection类型集合的工具类:Collections
一个是接口一个是类
Map接口
Map 类型的集合与Collection类型的集合不同,Map类型的集合存储数据的时候,要使用Key-Values的形式(键值对),且Key值不能重复,否则会覆盖原来的键值对。
1.Map接口中一些方法:
put 方法
get 方法
clear 方法
containsKey 方法
containsValue 方法
isEmpty 方法
size 方法
remove 方法
2.Map接口中常用的实现类
HashMap是线程不安全的,Hashtable是线程安全的。
HashMap允许key值或者value值为null,但是Hashtable中的key值或者value值都不允许为null,否则报错。
3.Map 类型集合遍历
使用keySet方法,可以返回该Map集合中的所有key值的set类型集合
Map map = new HashMap();
//调用put方法存值
for(Object key:map.keySet()){
System.out.println(key+" : "+map.get(key));
}
使用values方法,可以返回该Map集合中所有value值的Collection类型集合
Map map = new HashMap();
//调用put方法存值
for(Object value:map.values()){
System.out.println(value);
}
使用entrySet方法,可以返回该Map集合中,包含所有Entry类型对象的Set集合
Map map = new HashMap();
//调用put方法存值
Set entrySet = map.entrySet();
for(Object obj:entrySet){
Entry entry = (Entry)obj;
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
4.SortedMap接口和TreeMap接口
SortedMap接口是Map接口的子接口,其进一步提供对键的排序功能。
TreeMap类就是SortedMap接口的实现类。