Java集合类

Java集合类都继承自Collection和Map接口,它们各自有众多的实现类,集合大致分为三大类Set、List和Map,其中Set是无序不重复的集合,List是有序可重复集合,Map是由键和值对组成的集合,集合中保存的是对象(对象引用),集合的实现类有多种:ListArray,HashSet,TreeSet,LinkedList,HashMap,TreeMap等。

Collection接口和Iterator接口:

Collection接口的方法:boolean add(Obiect o),boolean remove(Object o),Iterator iterator();

一、集合的遍历

1、Iterator接口

 1 import java.util.*;
 2 public class SetTest {
 3     public static void main(String args[]){
 4         Collection books = new HashSet();
 5         books.add("JAVA从入门到精通");
 6         books.add("疯狂Java讲义");
 7         books.add("Java精编版");
 8         Iterator it = books.iterator();
 9         while(it.hasNext()){
10             String book = (String)it.next();
11             if(book.equals("疯狂Java讲义")){
12                 it.remove();
13             }
14             book="测试字符串";
15         }
16         System.out.println(books);
17     }
18 }

输出:

[Java精编版, JAVA从入门到精通]

2、foreach循环遍历

 1 import java.util.*;
 2 public class ForeachTest {
 3     public static void main(String args[]){
 4         Collection books = new HashSet();
 5         books.add(new String("JAVA从入门到精通"));
 6         books.add(new String("疯狂Java讲义"));
 7         books.add(new String("Java精编版"));
 8         for(Object obj:books){
 9             String book = (String)obj;
10             System.out.println(book);
11         }
12         System.out.println(books);
13     }
14 }

输出:

  Java精编版
  疯狂Java讲义
  JAVA从入门到精通
  [Java精编版, 疯狂Java讲义, JAVA从入门到精通]

Iterator 和foreach用于遍历集合元素,不是迭代集合元素本身,而是把集合中的元素值传给了迭代变量;其中Iterator必须依赖于Collection类对象,它不具有盛装对象的功能;在集合遍历的过程中不能改变集合。Iterator 和foreach用于遍历集合元素,不是迭代集合元素本身,而是把集合中的元素值传给了迭代变量;其中Iterator必须依赖于Collection类对象,它不具有盛装对象的功能;

二、Set集合

Set集合是无需不重复集合,Set集合的实现类有HashSet、TreeSet和EnumSet。

Set集合不允许两个相同对象的存在,Set集合中判断两个集合相同使用的方法是equals方法, 而不是==运算符,具体区别可以参考java学习笔记equals()和==比较,只要equals返回true,就认为是相同元素,不过由于Set集合的元素是根据hashCode来判断的,所以有时候equals返回true而hashCode不同也会判断为不同的对象;所以要尽量保持equals方法和hashCode判断一致。

HashSet类

HashSet类使用hash算法存储Set中的值,存取一个元素时,利用该元素(对象)的HashCode()方法获取元素的hashCode值,根据hashCode确定存储位置。不能保证排序,每个值分配一个hashCode,HashSet判断两个元素是否相等通过equals和hashCode判断,两个同时相等才相等;LinkedHashSet类是HashSet的子类,与HashSet不同的是LinkedHashSet会保存元素添加时的次序。

 1 import java.util.*;
 2 public class SetTest {
 3     public static void main(String args[]){
 4         HashSet ch = new HashSet();
 5         ch.add("A");
 6         ch.add("D");
 7         ch.add("B");
 8         ch.add("C");
 9         System.out.println(ch);
10         HashSet books = new HashSet();
11         books.add(-4);
12         books.add(-10);
13         books.add(6);
14         System.out.println(books);
15     }
16 }

输出:

[A, B, C, D]
[-4, 6, -10]

TreeSet类

TreeSet可以确保集合中元素有序,根据元素值的大小排序,排序方法又有自然排序和定制排序,默认使用自然排序;

自然排序方式是利用对象的compareTo(Object o)比较结果来升序排列,比较结果为正整数,0或者负整数,为0时表示两个对象相同,返回0时对象相同,根据Set集合的规则,此时equals()应该返回true。

 1 import java.util.*;
 2 public class SetTest {
 3     public static void main(String args[]){
 4         TreeSet ch = new TreeSet();
 5         ch.add("A");
 6         ch.add("D");
 7         ch.add("B");
 8         ch.add("C");
 9         System.out.println(ch);
10         TreeSet books = new TreeSet();
11         books.add(-4);
12         books.add(-10);
13         books.add(6);
14         System.out.println(books);
15     }
16 }

输出:

[A, B, C, D]
[-10, -4, 6]

注:文中部分取自《疯狂Java讲义》

posted on 2016-04-29 11:16  wbzhou1992  阅读(137)  评论(0)    收藏  举报

导航