集合总结
首先我们先看下集合的大体结构图
接口Collection
讲解
-
首先接口
Collection
作为我们常用的List
,Set
,的顶层接口,由于三者都是接口不能直接new接口,我们通常都是使用:Collection<String> str = new ArrayList<String>(); //或者使用接口new实现类 List<String> list = new ArrayList<String>();
-
接口
Collection
常用方式介绍-
boolean add(E e)
:给集合添加元素 boolean remove(Object obj):删除集合中指定的元素,成功返回true,失败返回false
boolean contains(Object obj):判断集合中是否包含指定的元素
int size():获取集合中元素的个数
boolean isEmpty():判断集合是否为空,就是判断集合中的元素个数是否为零
Object[] toArray():把集合中的元素,存储到数组中。
-
-
常用方法简单演示
public class CollectionTest {
public static void main(String[] args) {
CollectionTest test = new CollectionTest();
System.out.println(test.add());
System.out.println(test.remove());
System.out.println(test.contains());
test.size();
System.out.println(test.isEmpty());
test.toArray();
}
/**
* boolean add()方法测试
*/
public boolean add() {
Collection<String> name = new ArrayList<>();
boolean b = name.add("张三");
return b;
}
/**
* boolean remove(Object obj)测试
*/
public boolean remove() {
Collection<String> name = new ArrayList<>();
name.add("张三");
boolean remove = name.remove("张三");
return remove;
}
/**
* boolean contains(Object obj)
*/
public boolean contains() {
Collection<String> name = new ArrayList<>();
name.add("张三");
name.add("李四");
boolean contains = name.contains("王五");
return contains;
}
/**
* int size()
*/
public void size() {
Collection<String> name = new ArrayList<>();
name.add("张三");
name.add("张三");
name.add("李四");
name.add("王五");
int size = name.size();
System.out.println(size);
}
/**
* boolean isEmpty()
*/
public boolean isEmpty() {
Collection<Integer> isnull = new ArrayList<>();
isnull.add(1);
isnull.add(2);
isnull.add(3);
isnull.add(4);
boolean empty = isnull.isEmpty();
return empty;
}
/**
* Object[] toArray()
*/
public void toArray() {
Collection<String> name = new ArrayList<>();
name.add("张三");
name.add("李四");
name.add("王五");
name.add("赵六");
Object[] objects = name.toArray();
for (Object object : objects) {
System.out.println(object);
}
}
}
接口List
讲解
-
接口List继承了Collection接口,因此具有了Collection接口的方法。
-
除此之外
List
常用方法get(int index); set(int index,Object obj); add(int index,Object obj); remove(int index);
-
List
常用实现类讲解。-
ArrayList
讲解:- ArrayList是基于数组实现的list类,所以ArrayList类封装了一个动态的,允许再分配的Object[]数组,允许保存所有元素,包括null,可以根据索引位置对集合进行访问,查询快,增删慢,线程不安全,ArrayList创建时大小为0,当加入第一个元素时,进行第一次扩容,默认容量大小为10,每次都已当前数组大小的1.5倍去扩容。
-
ArrayList
创建以及遍历方式。-
//ArrayList创建方式 List<T> list = new ArrayList<>();
-
/** * 使用iterator迭代器遍历 */ public void List() { List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); list.add("赵六"); list.add("周七"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String next = iterator.next(); System.out.println(next); } }
-
/** * 使用for遍历 */ public void List() { List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); list.add("赵六"); list.add("周七"); for (String s : list) { System.out.println(s); } }
-
list遍历方式还有foreach,转数组等,此处就不一一列举了。
-
-
ListedList
讲解- 底层使用双向循环链表的数据结构,排列有序可重复,查询慢,增删快,线程不安全。
-
接口Set
讲解
-
Set
无序,不可重复。 -
HashSet
底层使用Hash
表实现,内部使用了HashMap
,排列无序不可重复,存储速度快,线程安全。 -
LinkedHashSet
底层采用Hash
表存储,并用双向链表记录插入顺序,排列有序不可重复,存取速度较HashSet
略慢,比TreeSet
快,线程不安全。 -
TreeSet
底层使用红黑树实现,内部使用了NavigableMap
,按自然顺序或者自定义顺序存放,不可重复,线程不安全。
接口Map
讲解
- 接口
Map
不属于Collection
接口,Map
代表具有映射关系的集合。 -
HashMap
底层使用哈希表,1.8以后又加了红黑树来实现,键无序,不可重复,可为null,值可重复为null,存储速度快,线程不安全。 -
HashTable
不允许null,线程安全。 -
TreeMap
二叉树实现,可对集合中的键进行排序。
个人博客