一.集合的概念
1.什么是集合
- 集合是一种容器, 长度可变, 可以存储任意类型的对象. 基本数据类型也可以装入集合, 但其实内部是先自动装箱成包装类对象, 然后再存入集合的
二.集合的分类
1.Collection
- List: 可重复, 有存储顺序,有索引
- ArrayList 底层数据结构是数组, 增删慢, 查找快,线程不安全,效率高。
- LinkedList 底层数据结构是链表, 增删快, 查找慢,线程不安全,效率高。
- Vector 底层数据结构是数组, 原理和ArrayList相同, 但线程安全。效率低。
- Set: 不可重复,存取顺序不一致,无索引
- HashSet 底层数据结构是哈希表,线程不安全。保证元素唯一性的原理:判断元素的hashcode值是否相同,如果相同,还会继续判断元素的equals方法,是否为true。
- TreeSet 底层数据结构是二叉树,线程不安全,可以对Set集合中的元素进行排序。保证元素唯一性的依据:compareTo方法return 0。排序的方式有两种:1.让元素自身具备排序。2.构造方法实现Comparator排序。
- LinkedHashSet
三.遍历集合
1.ArrayList 和 LinkedList 遍历方法:
ArrayList list=new ArrayList() ;
list.add("中国");
list.add("韩国");
list.add("美国");
list.add("俄国");
//方式一: for循环
for(Object obj:list){
Log.d(TAG,"国家:"+obj);
}
//方式二:迭代器
ListIterator iterator= list.listIterator();
while (iterator.hasNext()/*判断是否还有更多的集合元素*/){
Object obj=iterator.next();//获取集合元素,并且将光标向前推进1
Log.d(TAG,"国家:"+obj);
//iterator.remove();//删除next() 返回的元素
//iterator.set();//修改next() 返回的元素
//iterator.add(); //增加元素: 如果再next()之前调用将插入next元素之前,如果在next()之后调用将插入next()元素之后
}
LinkedList list =new LinkedList();
list.add("中国");
list.add("韩国");
list.addFirst("美国"); //插入第一个下标
list.addLast("俄国"); //插入最后一个下标
//方式一: for循环
for (Object obj:list){
Log.d(TAG,"国家:"+obj);
}
//方式二:迭代器
ListIterator iterator= list.listIterator();
while (iterator.hasNext())///判断是否还有更多的集合元素
{
Object obj=iterator.next();//获取集合元素,并且将光标向前推进1
Log.d(TAG,"国家:"+obj);
}
2. HashSet 和 TreeSet 遍历
HashSet 遍历
HashSet hashSet=new HashSet();
hashSet.add(1);
hashSet.add(2);
hashSet.add(3);
hashSet.add(4);
Iterator iterator=hashSet.iterator();
while (iterator.hasNext()){
Log.d(TAG,"number:"+iterator.next());
}
TreeSet 遍历
TreeSet treeSet=new TreeSet ();
treeSet.add(1);
treeSet.add(2);
treeSet.add(3);
treeSet.add(4);
Iterator iterator=treeSet.iterator();
while (iterator.hasNext()){
Log.d(TAG,"number:"+iterator.next());
}
插入查询速度比较:
100000条数据 | |||
集合 | 特点 | 插入 | 查询 |
ArrayList | 底层数据结构:数组线程 是否同步:不同步 | 38ms | 迭代器遍历:6ms For循环遍历:1ms Foreach遍历:6ms |
LinkedList | 底层数据结构:链表线程 是否同步:不同步 | 54ms | 迭代器遍历:13ms |
HashSet | 底层数据结构:哈希表线程 是否同步:不同步 | 121ms | 迭代器遍历:31ms |
TreeSet | 底层数据结构:二叉树线程 是否同步:不同步 | 257 ms | 迭代器遍历:17ms |
备注:如果在遍历的过程中需要删除和修改集合元素,那么就使用迭代器遍历集合。