集合框架是面试必问的一个知识点,在此我想整理一下集合框架的知识点。(常用的)
两大基类Collection与Map
在集合框架的类继承体系中,最顶层有两个接口:
-
Collection表示一组纯数据 -
Map表示一组key-value对
一般继承自Collection或Map的集合类,会提供两个“标准”的构造函数:
- 没有参数的构造函数,创建一个空的集合类
- 有一个类型与基类(
Collection或Map)相同的构造函数,创建一个与给定参数具有相同元素的新集合类
Collection或Map的子类都遵循这一约定。Collection
如上图所示,Collection类主要有三个接口:
|
Collection接口中有两个常用的子接口:List(列表),Set(集)。 List:可存放重复元素,元素存取是有序的。 ArrayList:底层为数组结构。查询速度快。增删稍慢。线程不同步。 LinkedList:底层为链表结构。增删速度快,查询稍慢。线程不同步 Vector:底层为数组结构。线程同步。被ArrayList替代了。因为效率低。 遍历List集合的三种方法List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
方法一:
超级for循环遍历
for(String attribute : list) {
System.out.println(attribute);
}
方法二:
对于ArrayList来说速度比较快, 用for循环, 以size为条件遍历:
for(int i = 0 ; i < list.size() ; i++) {
system.out.println(list.get(i));
}
方法三:
集合类的通用遍历方式, 从很早的版本就有, 用迭代器迭代
Iterator it = list.iterator();
while(it.hasNext()) {
System.ou.println(it.next);
}
Set:不可以存放重复元素,元素存取是无序的 HashSet:数据结构是哈希表。线程不同步。hashCode和equals TreeSet:可以对Set集合中的元素进行排序,数据结构为二叉树 实现Comparable接口,覆盖compareTo(Object obj)方法 实现Comparator接口,覆盖compare(Object o1,Object o2)方法 Set 的用法: 存放的是对象的引用,没有重复对象 Set set=new HashSet(); String s1=new String("hello"); String s2=s1; String s3=new String("world"); set.add(s1); set.add(s2); set.add(s3); System.out.println(set.size());//打印集合中对象的数目 为 2。 Set 的 add()方法是如何判断对象是否已经存放在集合中? boolean isExists=false; Iterator iterator=set.iterator(); while(it.hasNext()) { String oldStr=it.next(); if(newStr.equals(oldStr)){ isExists=true; } } 注:其实Set底层就是使用了Map集合 Map
取出map集合元素的两种方式方法keySet()和entrySet() Hashtable: 数据结构为哈希表,不可以存入null键null值,线程同步。 HashMap:数据结构为哈希表,允许使用 null 值和 null 键,线程不同步。 TreeMap:数据结构为二叉树。线程不同步。 用于给map集合中的键进行排序(排序方法和TreeSet一样,实现comparable和comparator两个接口即可)。 遍历Map的四种方法public static void main(String[] args) {
//第四种 |