Java中的集合功能整理

网上对集合的功能介绍有很多,也很详细。我在这里只能是对常用的几个集合类进行功能的简单梳理。小白一个。这里主要参考孙宇霞、王健编著的《Java编程从基础到应用》。内容仅供学习交流。

1.选择合适的集合类。

      Set:是一个接口,无序集合,不能包含重复元素。同时身为接口不能生成对象。但是类HashSet和TreeSet实现了该接口,所以通常使用的也是这两个。

      HashSet:该集合中主要存放的一些无序元素。如果你只是想用一个‘罐子’盛东西,其他什么都不关心,可以选它。

      TreeSet:该集合除了实现Set接口还实现了SortedSet接口。也就是说可以用它来进行一些排序默认升序。当然排序的元素必须具有可比性。也就是说对于基本类型如:Float,         Integer,String,Character等

     List:接口,允许出现重复元素。与Set另一个不同的地方就是元素有序。如果你对加进‘罐子’里东西很在乎先后。如谁先进去的谁后进去的,第几个是谁比较关心可以选用。但是同样。List是个接口我们通常使用的是两个实现了该接口的两个类arrayLis和LinkedList。

     ArrayList:支持对元素的快速访问。但是对插入和删除支持性差。

    LinkedList: 对元素的插入和删除性能良好。由于List中元素有序,可以我们不用Iterator对象也可以访问,不过要先调用toArray()方法。才能像操作一个普通数组一样访问。


2.常用类的关系图。这是一个简单图。PS:我保证你能搜到更复杂的。


这里Collection.Set. List都是接口,知道这层实现关系,这三个接口中的方法,就可以被实现接口的类对象所调用。

3.

Collection中的方法:

                                    boolean  add()添加一个元素;boolean addAll( Collection c)添加集合c中所有元素。void clear():清空集合;boolean contain(object o):是否包含元素o。

                                  int size():返回集合中元素个数;boolean isEmpty():是否为空; Object[] toArray():转变成包含此集合中所有元素的数组;boolean remove(object o):去除元素o; boolean removeAll(collection c)去除集合中c中所有元素;boolean retainAll(Collection c):仅保留c中所有元素 ;Iterator<E> iterator():返回一个Iterator对象,用于遍历集合元素。

HashSet:常用方法基本来源于Collection类,见上:

                                            

 Set<Integer> iset=new HashSet<Integer>();
    	   iset.add(Integer.valueOf(3));//这里用了一个封装类,也可以直接用一个基本数据类型
TreeSet:first():返回集合中第一个元素;last():返回集合中最后一个元素。poolFirst()返回集合中第一个元素然后移除。poolLast():返回最后一个元素然后移除。

           SortedSet<E> subSet(E,F):返回一个新集合,从E到F,但不包含F。

       SortedSet<E> headSet(E):返回一个包含E之前的元素,不包含E;SortedSet<E > tailSet(F)返回F之后元素,包含F。

  

public static void main(String[] args){
    	   SortedSet<Integer> iset=new TreeSet<Integer>();
    	   Scanner sc=new Scanner(System.in);
    	   System.out.println("请输入整型:");
    	   for(int i=0;i<4;i++){
    		   System.out.println("请输入第"+(i+1)+"个数字");
    		   int value=sc.nextInt();
    		   iset.add(value);
    	   }
    	   Iterator<Integer> it=iset.iterator();
    	   while(it.hasNext()){
    		   System.out.println(it.next());
    	   }
    	   
    	   SortedSet<Integer> head_set=iset.headSet(60);
    	   for(int j=0;j<head_set.size();j++){
    		   System.out.println(head_set.toArray()[j]);
    	   }
       }

ArrayList:get(i):获取第i个元素。int indexOf(object o):返回第一次出现指定元素的下标,没有则是-1;lastIndexOf(object o):返回最后一次出现指定元素索引,没有则返回-1;

                         set(index, E,)修改指定索引处元素,并返回之前的元素。 List<E> subList(E,F)返回指定下标之间的元素,不包含后者。

public static void main(String[] args){
    	   List<Integer> iset=new ArrayList<Integer>();
    	   Scanner sc=new Scanner(System.in);
    	   System.out.println("请输入整型:");
    	   for(int i=0;i<4;i++){
    		   System.out.println("请输入第"+(i+1)+"个数字");
    		   int value=sc.nextInt();
    		   iset.add(value);
    	   }
    	   Iterator<Integer> it=iset.iterator();
    	   while(it.hasNext()){
    		   System.out.println(it.next());
    	   }
    	   
    	   List<Integer> head_List=iset.subList(0, 2);
    	   for(int j=0;j<head_List.size();j++){
    		   System.out.println(head_List.get(j));//这里也可以转变成数组即调用方法toArray()[j]输出
    	   }
       }
LinekedList: addFirst(O)插入到集合开头;addLast(O):插入到集合尾部。removeFirst():移除第一个元素;removeLast():移除最后一个元素; getFirst():返回第一个元素;getLast():返回最后一个元素。

   

public static void main(String[] args){
    	   LinkedList<Integer> iset=new LinkedList<Integer>();
    	   Scanner sc=new Scanner(System.in);
    	   System.out.println("请输入整型:");
    	   for(int i=0;i<2;i++){
    		   System.out.println("请输入第"+(i+1)+"个数字");
    		   int value=sc.nextInt();
    		   iset.add(value);
    	   }
    	   iset.addFirst(5);
    	   for(int j=0;j<iset.size();j++){
    		   System.out.println(iset.get(j));//虽然linkedList有序,但是要想像普通数组一样操作它。你还得调用toArray()方法。
    	   }
    	   
    	   }

            写到这里大家应该有了一些浅显的认识。值得指出的是集合中存放的都是对象的引用值。这就是为什么前面的例子中会出现Integer.valueof():其实就是把基本数据类型转变成它的引用。不过现在JDK已经可以自动进行拆装箱功能,所以即使不写也没错。以上内容多为自己阅读后随写,不当之处敬请留言。相互学习,共同提高。

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值