引言
类集框架本质上相当于是容器,容器装什么东西由程序员指定
1.单列集合
单列集合是list和set,list的实现类有ArrayList和LinkedList,前者是数组实现,后者是链表实现。list和set,前者有序、可重复,后者无序不可重复。
1.1. list
java.util.List
接口继承自Collection
接口,它的实现类包括ArrayList、LinkedList、Vector等
list接口的方法比如下面:
实例如下:
import java.util.ArrayList;
import java.util.List;
public class ListDemo
{public static void main(String[] args){List<Integer> a=new ArrayList<Integer>();System.out.println("在集合尾部添加指定元素");a.add(1);a.add(2);System.out.println(a);}
}
//输出结果:在集合尾部添加指定元素
//[1, 2]
菱形运算符<>,是java8的更新之作,为了简化泛型代码,当创建一个泛型类的实例时,编译器会自动根据声明的变量类型,补全构造方法里的泛型类型参数。
见第七行的List<Integer> a=new ArrayList<Integer>();这其实是子类的向上转型,当然也可以不用转型,直接ArrayList<Integer> a=new ArrayList<Integer>()这样,都可以。前者呢,优点是变量a可以引用任何list实现类的对象,比如LinkedList、Vector的对象,而不需要修改变量声明的类型,例如
a = new LinkedList<Integer>();
后者呢,变量a不仅可以调用父类的方法,还可以调用子类独有的方法。
明白了list接口的使用,那么list的实现类ArrayList、LinkedList、Vector等也差不多会用了。
1.2. set
java.util.Set
接口同样继承自Collection
接口,Set接口不同于List接口,它是抽象接口;它的实现类包括java.util.HashSet和java.util.LinkedHashSet等。
import java.util.HashSet;
public class SetDemo
{public static void main(String[] args){HashSet<Integer> a=new HashSet<Integer>();a.add(12);a.add(12);a.add(34);System.out.print(a);}
}
//输出结果:[34, 12]
输入两个12,但是最终集合里只有一个12,说明自动过滤掉重复元素。
2.双列集合
map(映射)
java.util.Map,Map不同于List接口,它也是抽象接口;map接口的对象是键值对、关键字和值都是对象,关键字是唯一的,可以存相同的值,如果反复插入关键字,则新的替换旧的;
map的接口方法:
-
put(K key, V value)
:添加键值对。 -
get(Object key)
:通过键获取值。 -
remove(Object key)
:删除指定键的键值对。 -
containsKey(Object key)
:判断是否包含某键。 -
keySet()
:返回所有键的集合(Set<K>
)。 -
values()
:返回所有值的集合(Collection<V>
)。 -
entrySet()
:返回所有键值对的集合(Set<Entry<K, V>>
)。
import java.util.Map;
import java.util.HashMap;
public class MapDemo
{public static void main(String[] args){Map<String,Integer> a=new HashMap<>();a.put("小明",12);System.out.print(a);}
}
//输出结果:{小明=12}
3、Collection接口
3.1 为什么有多层接口?
Collection接口,定义全部集合的统一行为;List、Set、Queue进一步细化集合的行为(既继承父接口的行为,又可定义单独的行为);它们的实现类定义不同场景下的行为,不同实现类有不同的底层数据结构。