【集合】Java集合对比

--Iterator,Comparator,Collections

集合关系图


Collection:
 List:有序 可重复   -List以Array为基础
Vector:线程同步,效率低,线程安全  --查询效率高
ArrayList:不同步,效率高,多线程时不安全  -查询效率高
LinkedList:删,增效率高
 Set:无序 不重复   -Set是在HashMap的基础上实现的
HashSet
LinkedHashSet
SortedSet
TreeSet  --有序的
Map:
 Hashtable
properties
 HashMap
LindedHashMap
 SortedMap
TreeMap
=========================
集合类存放的都是对象的引用。
关于set的add()方法:如果要添加的对象已经存在,则会覆盖前面的对象。


=========================================================
1.集合的选择:
 存放要求:
1)无序:Set 不重复
2)有序:List 可重复
3)key-value对Map
 读和改的效率:
1)Hash*--两者都最高
2)Array*--读快改慢
3)Linked*--读慢改快
===========================================================
重复:两个对象equals   有序:存入的顺序与取出的顺序相同


单值映射
Set: 无序,不重复
List:有序且可重复---


双值映射
Map:键不可重复


======================Map=======================
提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
Map底层的“键”是用Set来存放的。
所以存入Map中的映射对的“键”对应的类必须重写 hashcode()和equals()方法。
Map接口中的方法:
put(Object key,Object value);
get(key)
remove(key)
containsKey(key)//判断此Map是否包含指定键的“键-值”对。
containsValue()//判断此Map是否包含指定值的“键-值”对。
isEmpty()
clear()
Set keySet();//返回此Map中包含的键的Set集。
Collection values();//返回此Map中包含的值的Collection集。


HashMap内部对“键”用Set进行散列存放。所以根据“键”去取“值”的效率很高。使用频率最高的一个集合。
LinkedHashMap是HashMap的子类,它可以依照插入的顺序来排列元素。


Hashtable:只是它保证线程的同步。键值不能为空。
HashMap:不同步,并允许使用 null 值和 null 键.


Hashtable有一个子类Properties:
Properties 可保存在流中或从流中加载。属性集中每个键及其对应值都是一个字符串。
getProperty(String key,String value);
getProperty(String key)
====================List====================
List中比Collection新增的方法:
get(i)
add(i,ele):指定位置如果已经有元素,则所有后续元素后移。
set(i,ele):用指定元素替换列表中指定位置的元素
remove(i):移除元素


ListIterator listIterator()      
返回此列表元素的列表迭代器


1.ArrayList():是使用数组结构实现的List集合
1)优点:对于使用索引取出元素有较好的效率
2)缺点:元素做删除或插入速度较慢,需要移动后续元素
2.LinkedList():是使用双向链表实现的集合。
1)对频繁的插入或删除元素有较好的效率
2)适合实现栈(Stack)和队列(Queue)
3.vector:与ArrayList()类似,区别在于vector是线程同步的。
====================================================
集合工具类Collections:实现了基于集合的一些常用算法
sort(List list):根据元素的自然顺序 对指定List列表按升序进行排序。List列表中的所有元素都必须实现 Comparable 接口。
shuffle(List):对List列表内的元素进行随机排列
reverse(List):对List列表内的元素进行反转
copy(List dest, List src):将src列表内的元素复制到dest列表中
List synchronizedList(List):返回指定列表支持的同步(线程安全的)列表


=========================Set=====================
Set接口存、取、删对象都有很高的效率。
对于要存放到Set集合中的对象,对应的类一定要重写equals()和hashCode(Object obj)方法以实现对象相等规则。
*************************
HashSet不保存元素的加入顺序。
HashSet根据元素的哈希码进行存放,取出时也可以根据哈希码快速找到。
TreeSet使用红黑树结构对加入的元素进行排序存放,所以放入TreeSet中元素必须是可“排序”的。


LinedHashSet根据元素的哈希码进行存放,同时用链表记录元素的加入顺序。


所有可“排序”的类都必须实现java.lang.Comparable接口,实现该接口中的唯一方法:
public int compareTo(Object obj); 该方法如果
返回 0,表示 this == obj
返回正数,表示 this > obj
返回负数,表示 this < obj
可“排序”的类通过Comparable接口的compareTo方法来确定该类对象的排序方式。


*********************************
Collection接口中定义的方法:
size():集合中的元素数
isEmpty():是否包含元素
contains(Object):是否包含指定元素
contains(Collection):是否包含指定collection中的所有元素
add(Obj):添加
addAll(Collection):添加指定collection中的所有元素
remove():移除
removeAll(Collection):移除此collection中那些也包含在指定collection中的所有元素。
clear():移除collection中所有的元素
Iterator iterator():返回在此collection的元素上进行迭代的迭代器
Object[] toArray():把此collection转成数组


==============================================
Iterator对象称作迭代器,用以方便的实现对集合内元素的遍历操作。
Iterator:hasNext(),next(),remove()
Enumeration:hasMoreElements(),nextElement()
--Iterator允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
==============================================
凡是能用 Iterator 迭代的集合都可以用JDK5.0中增强的for循环来更简便的遍历。


如果同一类对象要有多种排序方式,应该为该类定义不同的比较器(实现Comparator接口的类)。
使用Comparable接口定义排序顺序有局限性:实现此接口的类只能按compareTo()定义的这一种方式排序。







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值