Java集合SetListMap

2012-11-12

  Set ,List ,Map的区别和功能到底是怎样的?其实它是与数组区分开来的。

  数组:java数组的长度是固定的,在同一个数组中只能存放相同类型的数据,可以是基本数据类型,也可以存放引用类型的数据。

  java集合:存入于java.util包中,它不能存放基本类型数据,而只能存放对象的引用。

  Set (集):集合中的对象不按特定方式排序,并且没有重复对象。它的有些实现类能对集合中的对象按特定方式排序。与数学中的集合最接近,两者都不包含重复元素。

  List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。List与数组有些相似。

  Map(映射):集合中的第一个元素包含一对键对象和值对象,集合中没有重复的键对象,值可以重复。

  它的有些实现类能对集合中的键对象进行排序。切记在用到MAP时一定需要传入两个参数键和值。

  例:

  import java.util.*;

  public static void print(Collection<? extends Object> c){

  Iterator<? extends Object> it = c.iterator();

  //遍历集合中的所有元素

  while(it.hasNext()){

  Object element = it.next();

  System.out.println(element);

  }

  }

  public static void main(String args[]){

  Set<String> set = new HashSet<String>();//<String>指定集合中元素的类型。

  set.add("Tom");

  set.add("Mary");

  set.add("Jack");

  print(set);

  List<String> list = new ArrayList<String>();

  list.add("Linda");

  lis.add("Mary");

  list.add("Rose");

  print(list);

  Map<String,String> map = new HashMap<String,String>();//两个参数,键和值

  map.put("M","男");

  map.put("F","女");//与实现了Collection接口的set,list加入元素的方法不一样。

  print(map.entrySet());//entrySet()返回SET视图

  }

  }

  要知道两个异常:ConcurrentModificatiojException和ClassCastException

  1、对一个集合不能够一边修改一边操作(除了用Iterator进行修改)不然将抛出ConcurrentModificatiojException异常。

  2、当试图将对象强制转换为不是实例的时,抛出ClassCastException异常。

  Set类

  由上图中可知实现Set接口的两个类有HashSet(无序)和TreeSet(实现了SortedSet接口、有序)

  1)TreeSet支持两种排序:自然排序(默认)和客户排序

  自然排序:实现了Comparable接口,通过compareTo(Object o)方法比较。只能向TreeSet集合中加入同类型的对象,并且这些对象要实现Comparable接口。

  例1:

  Set<Object> set = new TreeSet<Object>();

  set.add(new Integer(8);

  set.add(new String("9");//抛出ClassCastException异常

  例2:

  Test类没有实现了Comparable接口,带有一个 String 和 int 的成员变量。

  Set<Object> set = new TreeSet<Object>();

  set.add(new Test("A",5);

  set.add(new Test("B",6);//抛出ClassCastException异常

  这也是用TreeSet时要注意的地方

  2)HashSet:按照哈希算法来存取集合中的对象,具有很好的查找性能。当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。跟数据结构中的散列存储概念一样。

  要明白一点的就是:当用户覆盖了object类的equals()方法,一定也要重写hashCode方法,而且TreetSet还要增加一个compareTo方法。

  例:

  import java.util.*;

  public class Demo2 implements Comparable{

  private String name;

  private int age;

  public Demo2(String a,int b){

  name = a;

  age = b;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public int compareTo(Object o) {

  Demo2 other = (Demo2)o;

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com