类集框架:List、Set、Map、Iterator、Comparator(重点)
2014-03-06 12:45
417 查看
一、类集框架作用
类集框架包含了一组标志接口,用户通过这些接口方便对基本类集(动态数组、链接表、树)进行高效率的实现。Java为类集框架提供了几个标准的实现工具,例如LinkedList、HashSet、TreeSet等,具体如下:
注意:Collection、Set、List都有iterator()方法,因此继承它们的类(TreeSet、HashSet、ArryList、LinkedList)和实现它们的接口(SortedSet)都保留了此方法,都可以通过迭代器iterator()进行迭代输出。一般的,实例化集合时,通常使用如下方法:
Set set = new HashSet();
Set set = new TreeSet();
List list = new ArryList();
List list = new LinkedList();由上可见,对象引用一般为Set和List。
注意:所有的映射都没有iterator()方法,因此若如果对映射进行迭代输出,则应先通过Map中的方法,转换为Set类型,再用集合的iterator()方法。
Map:
二、实现工具简介:
Collection——集合,传入参数为1个:
1.Collection为最大的接口,含有一个迭代器的方法iterator(),因此可通过迭代器对集合中的元素按照一定顺序排序;
2.TreeSet和SortedSet定义的集合,使用迭代器输出集合元素时,会按照自然顺序输出;也可定义一个实现比较规则(Comparator接口)的类,复写比较方法public int compare(Object o1, Object o2),根据返回值(-1,0,1)实现正序反序的输出;
3.其他的实现工具,使用迭代器输出集合元素时,顺序不确定(即使定义了比较规则,输出顺序也是不确定的)。
Map——映射,传入参数为2个(Key和Value):
1.Map为最大的接口,不含有迭代器方法iterator(),因此元素输出时不方便,需要转换为集合,才可使用此迭代方法;
2.Map映射含有的方法中,有2个方法的返回值为set集合:
3.TreeMap和SortedMap在不定义比较规则(Comparator接口),使用迭代器输出映射元素时,会按照自然顺序输出;也可定义一个实现比较规则(Comparator接口)的类,复写比较方法public int compare(Object o1, Object o2),根据返回值(-1,0,1)实现正序反序的输出;
4.其他实现工具,使用使用迭代器输出集合元素时,顺序不确定(即使定义了比较规则,输出顺序也是不确定的)。
三、示例
1.TreeSet和HashSet的输出比较
import java.util.*;
class SetDemo
{
public static void main(String[] args)
{
Set set= new TreeSet();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
for(Iterator iter = set.iterator();iter.hasNext();)
{
String s = (String)iter.next();
System.out.print(s+“ ”);
}
}
}
输出:a b c d
可以看出按默认的自然顺序输出
若把实例化定义为:Set set= new HashSet();
输出:d b c a
可以看出排序不规则
2.TreeSet实现反序输出
由于TreeSet含有一个输入参数为比较器的构造方法(注意:其他类(HashSet、LinkedList、ArryList)不含有此构造方法,也就是说只有TreeSet才可实现集合的反序排列):
因此可以通过设置比较器,实现TreeSet集合中元素的反序排列。
import java.util.*;
class SetDemo
{
public static void main(String[] args)
{
Set set= new TreeSet(new MyComparator());
set.add("a");
set.add("b");
set.add("c");
set.add("d");
for(Iterator iter = set.iterator();iter.hasNext();)
{
String s = (String)iter.next();
System.out.print(s+" ");
}
}
}
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
return -s1.compareTo(s2); //或者 return s2.compareTo(s1);
}
}
结果:d c b a
3.TreeMap和HashMap的输出比较
import java.util.*;
class TreeMapAndHashMapDemo
{
public static void main(String[] args)
{
Map map = new TreeMap();
map.put("a",new Integer(1));
map.put("b",new Integer(2));
map.put("c",new Integer(3));
map.put("d",new Integer(4));
Set set= map.entrySet();
for(Iterator iter = set.iterator();iter.hasNext();)
{
Map.Entry mapEntry = (Map.Entry)iter.next();
String key = (String)mapEntry.getKey();
Integer value = (Integer)mapEntry.getValue();
System.out.print(key+", "+value);
System.out.println();
}
}
}
结果:
a, 1
b, 2
c, 3
d, 4 可见,按照自然顺序排列
若把实例化Map map = new TreeMap();换成 Map map = new HashMap();
结果:
d, 4
b, 2
c, 3
a, 1 可见,排列顺序不规则
4.TreeMap实现反序输出
由于TreeMap含有一个输入参数为比较器的构造方法(注意:其他类(HashMap)不含有此构造方法,也就是说只有TreeMap才可实现集合的反序排列):
因此可以通过设置比较器,实现TreeMap映射中元素的反序排列。
import java.util.*;
class MapDemo
{
public static void main(String[] args)
{
Map map = new TreeMap(new MyComparator());
map.put("a",new Integer(1));
map.put("b",new Integer(2));
map.put("c",new Integer(3));
map.put("d",new Integer(4));
Set set= map.entrySet();
for(Iterator iter = set.iterator();iter.hasNext();)
{
Map.Entry mapEntry = (Map.Entry)iter.next();
String key = (String)mapEntry.getKey();
Integer value = (Integer)mapEntry.getValue();
System.out.print(key+", "+value);
System.out.println();
}
}
}
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
return -s1.compareTo(s2);
}
}
结果:
d, 4
c, 3
b, 2
a, 1
5.Map通过迭代器输出时向Set的转换的两种方式
①通过keySet()方法
import java.util.*;
class MapDemo
{
public static void main(String[] args)
{
Map map = new TreeMap(new MyComparator());
map.put("a",new Integer(1));
map.put("b",new Integer(2));
map.put("c",new Integer(3));
map.put("d",new Integer(4));
Set set= map.keySet();
for(Iterator iter = set.iterator();iter.hasNext();)
{
String key = (String)iter.next();
Integer value = (Integer)map.get(key);
System.out.print(key+", "+value);
System.out.println();
}
}
}
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
return -s1.compareTo(s2);
}
}
结果:
d, 4
c, 3
b, 2
a, 1
②通过entrySet()方法
详见示例4。
类集框架包含了一组标志接口,用户通过这些接口方便对基本类集(动态数组、链接表、树)进行高效率的实现。Java为类集框架提供了几个标准的实现工具,例如LinkedList、HashSet、TreeSet等,具体如下:
注意:Collection、Set、List都有iterator()方法,因此继承它们的类(TreeSet、HashSet、ArryList、LinkedList)和实现它们的接口(SortedSet)都保留了此方法,都可以通过迭代器iterator()进行迭代输出。一般的,实例化集合时,通常使用如下方法:
Set set = new HashSet();
Set set = new TreeSet();
List list = new ArryList();
List list = new LinkedList();由上可见,对象引用一般为Set和List。
注意:所有的映射都没有iterator()方法,因此若如果对映射进行迭代输出,则应先通过Map中的方法,转换为Set类型,再用集合的iterator()方法。
Map:
二、实现工具简介:
Collection——集合,传入参数为1个:
1.Collection为最大的接口,含有一个迭代器的方法iterator(),因此可通过迭代器对集合中的元素按照一定顺序排序;
2.TreeSet和SortedSet定义的集合,使用迭代器输出集合元素时,会按照自然顺序输出;也可定义一个实现比较规则(Comparator接口)的类,复写比较方法public int compare(Object o1, Object o2),根据返回值(-1,0,1)实现正序反序的输出;
3.其他的实现工具,使用迭代器输出集合元素时,顺序不确定(即使定义了比较规则,输出顺序也是不确定的)。
Map——映射,传入参数为2个(Key和Value):
1.Map为最大的接口,不含有迭代器方法iterator(),因此元素输出时不方便,需要转换为集合,才可使用此迭代方法;
2.Map映射含有的方法中,有2个方法的返回值为set集合:
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 set 视图。返回的 set 中的每个元素都是一个 [code]Map.Entry类型。[/code]
Set<K> keySet() 返回此映射中包含的键的 set 视图。返回的 set 中的每个元素都是一个 [code]K类型。[/code]
3.TreeMap和SortedMap在不定义比较规则(Comparator接口),使用迭代器输出映射元素时,会按照自然顺序输出;也可定义一个实现比较规则(Comparator接口)的类,复写比较方法public int compare(Object o1, Object o2),根据返回值(-1,0,1)实现正序反序的输出;
4.其他实现工具,使用使用迭代器输出集合元素时,顺序不确定(即使定义了比较规则,输出顺序也是不确定的)。
三、示例
1.TreeSet和HashSet的输出比较
import java.util.*;
class SetDemo
{
public static void main(String[] args)
{
Set set= new TreeSet();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
for(Iterator iter = set.iterator();iter.hasNext();)
{
String s = (String)iter.next();
System.out.print(s+“ ”);
}
}
}
输出:a b c d
可以看出按默认的自然顺序输出
若把实例化定义为:Set set= new HashSet();
输出:d b c a
可以看出排序不规则
2.TreeSet实现反序输出
由于TreeSet含有一个输入参数为比较器的构造方法(注意:其他类(HashSet、LinkedList、ArryList)不含有此构造方法,也就是说只有TreeSet才可实现集合的反序排列):
public TreeSet(Comparator<? super E> c) 构造一个新的空 set,该 set 根据指定的比较器进行排序。
因此可以通过设置比较器,实现TreeSet集合中元素的反序排列。
import java.util.*;
class SetDemo
{
public static void main(String[] args)
{
Set set= new TreeSet(new MyComparator());
set.add("a");
set.add("b");
set.add("c");
set.add("d");
for(Iterator iter = set.iterator();iter.hasNext();)
{
String s = (String)iter.next();
System.out.print(s+" ");
}
}
}
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
return -s1.compareTo(s2); //或者 return s2.compareTo(s1);
}
}
结果:d c b a
3.TreeMap和HashMap的输出比较
import java.util.*;
class TreeMapAndHashMapDemo
{
public static void main(String[] args)
{
Map map = new TreeMap();
map.put("a",new Integer(1));
map.put("b",new Integer(2));
map.put("c",new Integer(3));
map.put("d",new Integer(4));
Set set= map.entrySet();
for(Iterator iter = set.iterator();iter.hasNext();)
{
Map.Entry mapEntry = (Map.Entry)iter.next();
String key = (String)mapEntry.getKey();
Integer value = (Integer)mapEntry.getValue();
System.out.print(key+", "+value);
System.out.println();
}
}
}
结果:
a, 1
b, 2
c, 3
d, 4 可见,按照自然顺序排列
若把实例化Map map = new TreeMap();换成 Map map = new HashMap();
结果:
d, 4
b, 2
c, 3
a, 1 可见,排列顺序不规则
4.TreeMap实现反序输出
由于TreeMap含有一个输入参数为比较器的构造方法(注意:其他类(HashMap)不含有此构造方法,也就是说只有TreeMap才可实现集合的反序排列):
public TreeMap(Comparator<? super K> c) 构造一个新的空映射,该映射根据给定的比较器进行排序。
因此可以通过设置比较器,实现TreeMap映射中元素的反序排列。
import java.util.*;
class MapDemo
{
public static void main(String[] args)
{
Map map = new TreeMap(new MyComparator());
map.put("a",new Integer(1));
map.put("b",new Integer(2));
map.put("c",new Integer(3));
map.put("d",new Integer(4));
Set set= map.entrySet();
for(Iterator iter = set.iterator();iter.hasNext();)
{
Map.Entry mapEntry = (Map.Entry)iter.next();
String key = (String)mapEntry.getKey();
Integer value = (Integer)mapEntry.getValue();
System.out.print(key+", "+value);
System.out.println();
}
}
}
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
return -s1.compareTo(s2);
}
}
结果:
d, 4
c, 3
b, 2
a, 1
5.Map通过迭代器输出时向Set的转换的两种方式
①通过keySet()方法
import java.util.*;
class MapDemo
{
public static void main(String[] args)
{
Map map = new TreeMap(new MyComparator());
map.put("a",new Integer(1));
map.put("b",new Integer(2));
map.put("c",new Integer(3));
map.put("d",new Integer(4));
Set set= map.keySet();
for(Iterator iter = set.iterator();iter.hasNext();)
{
String key = (String)iter.next();
Integer value = (Integer)map.get(key);
System.out.print(key+", "+value);
System.out.println();
}
}
}
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
return -s1.compareTo(s2);
}
}
结果:
d, 4
c, 3
b, 2
a, 1
②通过entrySet()方法
详见示例4。
相关文章推荐
- JAVA类集框架 List、Set、Iterator、Map的简单理解
- java4Android(20):类集框架->Set/Map/List->ArrayList简单实例
- Java中容器[Collection(List,Set,Queue),Map],迭代器(Iterator)和比较器(Comparator)及列表排序
- JAVA简单理解累计框架 List、Set、Iterator、Map
- java类集整理collection map iterator listiterator list set enumeration
- 集合框架总结——Collection、Iterator、List、Set、Map
- java类集(List/Set/Map/Iterator)(Enumeration/Vector/Stack/Properties)
- Map、Set、Iterator迭代详解与 Java平台的集合框架
- java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用
- Java2的集合框架主要的三种:List、Set和Map
- java中的集合框架Set 、List 、Map
- 4.1 Collection,List,Set,Iterator,Map
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- Map集合,List集合,Array数组,Iterator迭代,Collection集合,Set集合的多种遍历方式
- Map、Set、Iterator迭代详解与Java平台的集合框架
- 初始集合框架 List Map Set
- 集合框架中的list、set和map的浅析
- List, Map, Set与Iterator的使用
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 集合Collection,List,Set,Map,Iterator,Entry