java集合类的总结

一:什么是集合类

一般指实现了Collection和Map(集合类中两个基本接口)等接口的类

二:集合类有什么作用

可以用java类库来实现传统的数据结构

集合接口




具体集合:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                 集合类型                                    描述
--------------------------------------------------------------------------------------------------------------------------
Arraylist                           一种可以动态增长和缩减的索引序列
     LinkedList                        一种可以在任意位置进行高效的插入和删除操作的序列
     ArrayDeque                     一种用循环数组实现的双端队列
     HashSet        一种没有重复元素的无序集合 
     TreeSet                            一种有序集
     EnumSet                          一种包含枚举类型值的集
     LinkedHashSet                一种可以记录元素插入次序的集
     PriorityQueue                  一种允许搞笑删除最小元素的集合
     HashMap                           一种存储键/值关联的数据结构
     TreeMap                           一种键值有序排列的映射表
     EnumMap                         一种键值属于枚举类型的映射表
     linkedHashMap                一种可以记住键/值添加序列的映射表
     WeakHashMap                 一种其值没有用武之地后可以被垃圾回收器回收的映射表
     IdentityHashMap             一种用==而不是用equals比较键值的映射表          
---------------------------------------------------------------------------------------------------------------------------






常用集合类

LinkedList:
     方便从中间位置删除一个元素,所以链表都是双向链接的(每个结点还存放着指向前驱结点的引用)。

示例1:
List<String> staff = new LinkedList<>();//LinkedList实现接口List
staff.add("John");
staff.add("Bob");
staff.add("Amy");
Iterator iter = staff.iterator();//获取迭代器
String first = iter.next();//访问staff第一个元素
String second = iter.next();//访问staff第二个元素
iter.remove();//移除最后一个访问的元素

但是链表与泛型集合有一个很重要的区别。链表是一个有序的集合,每一个对象的位置十分重要。LinkedList.add方法将对象添加到链表的尾部。但是,经常需要将对象添加到链表的中间。由于迭代器是描述集合中位置的,所以依赖于位置的add方法将由迭代器负责。只有对自然有序的集合使用迭代器才有实际意义。
当有一个对象有同时获取多个迭代器是需要特别注意。假如如果在某个迭代器修改集合时,另外一个迭代器对其进行遍历,一定会出现混乱状况。如果迭代器发现另外一个迭代器多集合进行了修改就会抛出一个ConcurrentModificatio
Exception错误
List<String> list ...
Iterator iter1 = list.iterator();
Iterator iter2 = list.iterator();
iter1.next();
iter1.remove();
iter2.next();//抛出一个ConcurrentModificationException错误
为了避免发生并修改的异常,遵从规则:可以根据需要给容器附加许多迭代器,但是这些迭代器只能读取列表。另外,再单独附加一个既能读又能写的迭代器。
常用方法:
API :java.util.List<E>1.2
Listlterator<E>listlterator () 返回一个迭代器
Listlterator<E>listlterator(int index)返回一个链表迭代器,以便方便来访问列表中的元素,这个元素是第一次调用next返回的给定索引的元素
void add(int i,E element)在给定位置添加一个元素
void addAll(int i,Collection <? extends E>element)将某个集合中的所有元素添加到指定位置
E remove(int i)删除指定位置的元素并返回这个元素
E get(int i)获取指定位置的元素
E set(int i,E element)用新元素取代给定位置的元素,并返回原来那个元素
int indexOf(Object element)返回与指定元素相等的元素在列表中第一次出现的位置,如果没有这样的元素,返回-1
E set(int i,E element)用新元素取代给定位置的元素,并返回原来那个元素
int lastindexOf(Object element)返回与指定元素相等的元素在列表中最后一次出现的位置,如果没有这样的元素,返回-1
API;java.util.Listlterator<E>1.2(是lterator的子类)
void add(E element)在当前位置添加元素
E previous()返回前一个元素,如果已经到达列表的头部,则会抛出一个NoSuchElementException异常
void set(E element)用新元素取代next或previous上次访问的元素。如果在next或previous上次调用之后的列表被改变,则抛出一个IllegalStateException异常
boolean hasPrevious()当反向迭代列表时,还有可供访问的元素,返回true
LinkedList(Collection <?extends E>elements)构造一个链表,并把集合中所以的元素添加到这个链表中
void addFirst(E element)向头部添加元素
void addLast(E element)向尾部添加元素
E getFirst(E element)返回头部元素
E getLast(E element)返回尾部元素
E removeFirst(E element)删除并返回头部元素
E removeLast(E element)删除并返回尾部元素




HashSet:
实现基于散列表的表,它只在桶(散列表用链表数组实现,每个列表被成为桶)中查找元素,而不必查看集合中的所以元素。散列集的迭代器将依次访问所以的桶。
方法:
HashSet()构造一个空的散列表
HashSet (Collection <?extends E>elements)
HashSet(int initialCapacity)构造一个空的具有一定指定容量(桶数)的散列集
int hashCode()返回对象的散列码


TreeSet:
跟HashSet差不多,但是是一个有序的。

ArrayDeque:
实现队列数据结构,实现了Deque接口
ProrityQueue:
优先级队列中的元素可以按照任意的顺序插入,但总是按照排序的顺序进行检索。典型示例任务调度。
PriorityQueue (int initialCapacity,Compare <?super E>c)构造一个一个优先级队列,并用指定的比较器对元素进行排序。












  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值