Java中的集合
来源:互联网 发布:投影仪怎么连接网络 编辑:程序博客网 时间:2024/05/21 06:01
java中的集合比较好用,之前一直感觉很迷糊,今天爬了爬书,把思路整理整理列了下来--
集合主要分为3类:
- Set
- List
- Map
他们的通用接口:
- boolean add(e); 添加元素
- boolean addAll(Collection e) ;讲collection e中所有元素添加到集合中
- boolean contains(e) 是否包含元素e;
- boolean containsAll(Collection e) 是否包含全部集合e中的元素
- void clear();清空集合
- remove(e) ; 删除元素
- removeAll(Collection e)删除所有e中包含的元素
- iterator() ; 范围集合的迭代器
- boolean retainAll(Collection c) 删除所有c中不包含的元素,有点类似两个集合求并
在讲集合前需要了解一些Iterator接口,Iterator接口是Collection的迭代器,主要作用是遍历Collection中的元素,主要提供三个方法
- boolean hasNext() ,如果集合没有遍历完,返回true
- Object next(),返回遍历所在位置的下一个元素
- Object remove(),返回并删除刚刚遍历的元素。
1、 Set
Set概念有点类似我们数学中的集合概念,随机无需的个体,但是不能有相重复的个体。
对Set操作的方法基本和Collection中是一样的,只是在添加的时候有相同的元素添加的时候Set中只保存一份,
例如Set.add(13),Set.add(13) ,最终Set中只有一个13.
Set中判断两个元素是否相等时通过equals来比较,如果两个元素调用equals方法返回true则认为这两个元素相等,作为相同的元素不能同时添加到同一个Set中。
HashSet是实现Set接口的一个类,主要通过元素的hashCode()返回值来确定存放的位置,具有检索快的优点。
通过时确定equals 返回true和 hashCode()返回值相等来确定两个元素为相同元素。
通常最好的方法是放入hashSet的类在重写其equals 和 hashcode()方法时应该能保证 equals返回true的两个对象其hashcode()也应该相等,这样能够精确实现HashSet所表示的精确意义。
除了HashSet,还有LinkedHashSet,这个是在具体的物理实现采用链表的方式来实现,具有更好的遍历性能,同时,相比较HashSet,LinkedHashSet因为底层采用了链表的方式实现,在添加元素的时候是有序,也是说在遍历的时候是按照加入顺序来遍历的。
同时还有TreeSet ,这个是利用红黑树算法来实现一个有序的Set,还有一个是EnumSet,专门为枚举对象设立的Set集合,
2、List
List是一个集合,类似我们的数组,可以通过类似的顺序下表来访问集合中的值,他和Set的主要不同就是List中可以有重复的元素。
因为可以通过索引来确定元素的位置,所以相对应的有一些新的操作方法。
- add(e ,index)在index位置添加e;
- addAll(Collection c, index)在index位置添加集合c
- Object get(index ) 获取index位置的元素
- int indexOf(Object e) e在集合中第一次出现的的位置
- int lastIndexOf(object e) e 在集合中最后出现的位置
- Object remove(index )删除index位置的元素
- Object set(index,e)在index位置置换e元素。
- List subList(from,to)返回从from位置到to位置的一个新的子List
对应的有一个 ListIterator遍历器,提供
- boolean hasPrevious(),返回该迭代器关联的集合是否还有上一个元素
- Object previous(),返回上一个元素
- void add()在指定的位置添加一个元素。
实现List的常用的有ArrayList,Vector(不推荐使用)
ArryaList initCapacity可以确定初始容量,在确定集合大小的情况下可以通过设定initCapacity值来提高程序的效率。
3、queue
element()返回元素,若为空,返回异常
peek()返回队首元素,若为空返回null
add()添加元素
offer()在容量有限制的情况下offer更好
poll获取队首元素并删除该队首,若为空,返回null
remove 获取队首元素,并删除该元素,若为空,返回异常。
Queue就是我们所说的先进先出的队列。
主要实现类PriorityQueue,这个并不是标准的队列,这个通过Comparable接口来确定每个元素的大小并排序,队首为最小的元素。
Deque 双端队列,LinkedList实现这个接口,也实现了List接口,因为实现了Deque接口,可以通过LinkedList来实现Stack。
4、Map
Map就是key-value对的集合
同样实现的有HashMap,LinkedHashMap,SortedMap和TreeMap,EnumMap,其实现原理都和Set有类似的原理,如果每对key-value中value为null,那样的话Map就等价Set了。
其中需要比对是HashMap和Hashtable,一个是非线程安全,一个线程安全,非线程安全的通常都有着更好的性能,但是在多个进程对其操作时就需要考虑多线程安全的问题。
Java中还提供了一个Collections类,里面包含一个静态方法,这些静态方法可以对前面所介绍的Collection操作,包括排序,查询,修改,还有一个同步控制的方法,具体包含的方法可以查阅API,就不在这里列了。
第一篇完了,还是有些急躁,耐心不足,开始就是进步,下次努力。
0 0
- JAVA中的集合类
- JAVA中的集合类
- JAVA中的集合类
- JAVA中的集合类
- JAVA中的集合类
- JAVA中的集合类 - -
- JAVA中的集合类
- java中的集合类
- Java中的集合类
- Java中的集合
- JAVA中的集合
- java中的集合
- java中的集合排序
- Java中的一些集合
- JAVA中的集合类
- Java中的集合类
- Java中的集合类
- java中的集合SetEntry
- hdu 3549 Flow Problem(网络流增广路径主要算法)
- (1)Linux mint 15 环境配置
- Linux-->问题解决-->/dev/mapper/VolGroup-lv_root: unexpected inconsistency; run fsck manually
- PAT:5-1. 约分最简分式(15)
- java重命名
- Java中的集合
- PAT:5-2. 念数字(15)
- Floyd算法(原理|代码实现)
- Web Service中的几个重要术语
- 12096 - The SetStack Computer
- PAT:5-3. 求a的连续和(15)
- 什么是Nagios
- “Vbox安装CentOS系统”之低级错误一例:版本的选择
- PAT:6-0. 混合类型数据格式化输入(5)