Map
|
Map |
Set |
List |
元素特点 |
Key-value存储 Key不可重复 Value可重复 |
直接存储 不可重复 |
直接存储 可重复 |
遍历方式取出时 |
KeySet+Iterator方式 EntrySet+Iterator方式 |
Iterator方式
|
Iterator方式 或索引方式 |
遍历取出时 |
HashMap无序 TreeMap Key有序 |
HashSet无序 TreeSet有序 |
有序(先添加的索引为0) |
使用时注意 事项 |
HashMap的Key是否自定义重复规则 TreeMap是否需要自定义比较排序的规则 |
是否需要自定义重复规则 TreeSet是否需要自定义比较排序规则 |
是否有删除或者插入操作,有就LinkedList,有搜索操作用ArrayList |
有无get方式取出 |
有get(Key)方式 |
无get方法 |
有get(index)方式 |
一、List
1、ArrayList
1、创建List
名称 |
功能 |
add(T) |
增加一个元素 |
get(i ) |
取出某个元素 |
Contains(T) |
是否包含某元素 |
isEmpty() |
集合是否为空 |
Set(index,T) |
替换指定位置的元素 |
Remove(index) |
删除指定元素 |
Clear() |
清空 |
2、遍历方式
1、有索引遍历
For(int i = 0; i < list.size(); i++ )
{
T t = list.get(i);
}
2无索引方式
For(Iterator iter = list.iterator();iter.hasNext();)
{
T t = iter.next();
}
3、底层维护的是数组,是有序的,可以添加重复的元素
2、LinkedList
1、创建List
名称 |
功能 |
add(T) |
增加一个元素 |
get(i ) |
取出某个元素 |
Contains(T) |
是否包含某元素 |
isEmpty() |
集合是否为空 |
Set(index,T) |
替换指定位置的元素 |
Remove(index) |
删除指定元素 |
Clear() |
清空 |
2、遍历方式
1、有索引遍历
For(int i = 0; i < list.size(); i++ )
{
T t = list.get(i);
}
2无索引方式
For(Iterator iter = list.iterator();iter.hasNext();)
{
T t = iter.next();
}
3、底层维护的是一个个的Entry对象,是有序的,可以添加重复的元素,可以用来实现队列与栈的数据结构。
LinkedList与ArrayList总结
|
LinkedList |
ArrayList |
使用方式 |
New |
New |
遍历 |
For循环+索引或者Iterator |
For循环+索引或者Iterator |
底层 |
双向循环链表 |
数组 |
使用特点 |
有删除和插入操作时 |
搜索操作时 |
List是元素是可重复的,取出是有序的,有get方法取出。 |
二、Set
1、HashSet
1、创建Set
名称 |
功能 |
add(T) |
增加一个元素 |
Contains(T) |
是否包含某元素 |
isEmpty() |
集合是否为空 |
Remove(index) |
删除指定元素 |
Clear() |
清空 |
2、遍历方式
1、只有无索引方式
For(Iterator iter = set.iterator();iter.hasNext();)
{
T t = iter.next();
}
3、HashSet的元素特点是元素无重复,取出时无序,所以在添加元素到集合的时候需要判断此对象是否已经被添加,判断规则需要自己实现,实现的时候一般是元素类中重写HashCode与equals方法。String类已经重写了HashCode与equals方法,内容一样则说明俩个对象一样,默认的Object类的比较方法是判断俩个对象的地址是否一样决定是否为同一元素。
2、TreeSet
1、创建Set
名称 |
功能 |
add(T) |
增加一个元素 |
Contains(T) |
是否包含某元素 |
isEmpty() |
集合是否为空 |
Remove(index) |
删除指定元素 |
Clear() |
清空 |
First() |
返回第一个元素 |
Last() |
返回最后一个元素 |
2、遍历方式
1、只有无索引方式
For(Iterator iter = set.iterator();iter.hasNext();)
{
T t = iter.next();
}
3) TreeSet的元素特点是元素无重复,取出时有序,所以在添加元素,不仅需要进行对象是否存在的判断,还要进行排序,TreeSet的默认排序规则是自然排序(数字大小)或者字母顺序,对象的顺序需要调用实现自己的比较规则,在元素类定义时实现comparator接口,修改compare方法;
HashSet与TreeSet总结
|
Hashset |
TreeSet |
使用方式 |
New |
New |
遍历 |
Iterator方式 |
Iterator方式 |
使用特点 |
元素无重复 |
元素无重复并有序 |
注意事项 |
实现对象重复比较 |
实现对象重复比较外还需实现有序的规则 |
使用特点在代码上的体现 |
元素类重写HashCode与equals方法 |
元素类实现Comparator接口,并重写compare方法 |
Set |
一、Map
1、HashMap
1、创建Map
名称 |
功能 |
put(Key,value) |
增加一对值 |
get(key ) |
取出对应Key的Value值 |
ContainsKey() |
是否包含某个Key |
ContainsValue() |
是否包含某个Value; |
isEmpty() |
集合是否为空 |
EntrySet() |
返回所有实体的Set集合 |
KeySet() |
返回所有key的Set集合 |
Remove(key) |
删除指定Key元素 |
Clear() |
清空 |
Values(); |
返回所有的value集合 |
2、遍历方式
1、KeySet方式遍历
Set
For(Iterator iter = set.iterator;iter.hasNext();)
{
T key = iter.next();
T value = map.get(key);
}
2、EntrySet方式遍历
Set
For(Iterator iter = set.iterator;iter.hasNext();)
{
Map.Entry
T Key = entry.getKey()
T value = entry.getValue();
}
3、HashMap的元素特点是Key-Value对存储的,Key不能重复,Value可以重复,增加元素对的时候如果该key存在时,则用现在的value代替原来的value值,遍历取出元素对时是无序的,可以用get(Key)的方式取value,如果该Key不存在则返回null;
2、TreeMap
1、创建Map
名称 |
功能 |
put(Key,value) |
增加一对值 |
get(key ) |
取出对应Key的Value值 |
ContainsKey() |
是否包含某个Key |
ContainsValue() |
是否包含某个Value; |
isEmpty() |
集合是否为空 |
EntrySet() |
返回所有实体的Set集合 |
KeySet() |
返回所有key的Set集合 |
Remove(key) |
删除指定Key元素 |
Clear() |
清空 |
Values(); |
返回所有的value集合 |
2、遍历方式
1、KeySet方式遍历
Set
For(Iterator iter = set.iterator;iter.hasNext();)
{
T key = iter.next();
T value = map.get(key);
}
2、EntrySet方式遍历
Set
For(Iterator iter = set.iterator;iter.hasNext();)
{
Map.Entry
T Key = entry.getKey()
T value = entry.getValue();
}
3、TreeMap的元素特点是Key-Value对存储的,Key不能重复,Value可以重复,增加元素对的时候如果该key存在时,则用现在的value代替原来的value值,遍历取出元素对时Key是有序的,默认是自然顺序,可以让key类实现Comparator接口自定义Key的排序,可以用get(Key)的方式取value,如果该Key不存在则返回null;
HashMap与TreeMap总结
|
Hashset |
TreeSet |
使用方式 |
New |
New |
遍历 |
KeySet+Iterator方式 EntrySet+Iterator方式 |
KeySet+Iterator方式 EntrySet+Iterator方式 |
使用特点 |
Key不可重复Value可重复并取出时无序 |
Key不可重复Value可重复并取出时Key有序 |
注意事项 |
无 |
实现对Key的有序的规则 |
使用特点在代码上的体现 |
无 |
MyCoparator |
Map |
TreeMapTreeSet用到设计模式(策略模式 Strategy)
1) 抽象策略角色abstractStrategy(一个抽象类或接口)例如comparator接口
2) 具体策略角色(包装了相关的算法和行为,例如:比较行为)
3) 环境角色(持有抽象策略角色的一个引用,以及改变策略的方法,最终给客户端调用,)
4) 客户端(开发者)
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。