zoukankan      html  css  js  c++  java
  • Java集合的复习

    鉴于考试临近,感觉Java集合这一块不是很熟悉,但是,在实战中,java 中的集合很是常用。于是花几天时间复习Java中的集合。首先根据一个解一下集合的理解顺序思路。

    在java.util 包中提供了一些集合类,常用的有List,Set,Map。其中List和Set实现了Collection父类接口。Map则是键值对的映射集合。

    List接口中的常用方法是ArrayList类方法,该类方法方便查询,但是插入和删除却比较缓慢。它每进行一次插入或者删除操作,都会影响被操作的后面的对象,最后完成,效率会很低。相较之下,后来的LinkedList类方法就方便插入和删除,但是随机访问的效率会很低。

    例如ArrayList类,方便查询:

     1 package jihe;
     2 
     3 import java.awt.List;
     4 import java.util.ArrayList;
     5 import java.util.Iterator;
     6 
     7 public class Study {
     8     public static void main( String[] args )  {
     9         ArrayList al = new ArrayList(); // Create a new ArrayList
    10         for( int i=0; i<10; i++ ) {
    11              al.add( new Integer( i ) ); // Add Items to the array list
    12             }
    13         for( int i=0; i<al.size(); i++ ) {
    14              System.out.println( i + " = " + al.get( i ) );
    15             }
    16         al.remove( 5 );
    17         al.set( 5, new Integer( 66 ) );
    18         for( Iterator i=al.iterator(); i.hasNext(); ) {
    19                     Integer integer = ( Integer )i.next();
    20                     System.out.println( integer );
    21             }
    22         }
    23     }

    再来看看LinkedList类,方便向集合中插入和删除元素:

     1 package jihe;
     2 
     3 import java.util.LinkedList;
     4 
     5 public class Example {
     6 
     7     public static void main(String[] args) {
     8         String a = "A", b = "B", c = "C", test = "Test";
     9         LinkedList<String> list = new LinkedList<String>();
    10         list.add(a); // 索引位置为 0
    11         list.add(b); // 索引位置为 1
    12         list.add(c); // 索引位置为 2
    13         System.out.println(list.getFirst());// 获得并输出列表开头的对象
    14         list.addFirst(test);// 向列表开头添加一个对象
    15         System.out.println(list.getFirst());// 获得并输出列表开头的对象
    16         list.removeFirst();// 移除列表开头的对象
    17         System.out.println(list.getFirst());// 获得并输出列表开头的对象
    18     }
    19 }
    View Code

    运行结果:

    由于Set集合是唯一性的,由HashSet类实现的Set集合的优点是能够快速定位集合中的元素。HashSet类需要重新实现equals()方法和hashCode()方法。

    Map集合为映射类型,每个对象都是成对存在的。每个对象都有key和value,通过 键 获取 值。

    Map接口的常用实现类有HashMap和TreeMap,HashMap是通过哈希码对其内部的映射关系进行快速查找,而TreeMap是有一定的顺序的,实现Comparable接口。如果遍历无序,则用HashMap进行删除和添加更为有效,否则TreeMap效果更好。

    Map集合允许值对象为null,无个数限制,Set中只允许一个,不能重复。当get()方法返回值为null时,存在两种情况:value值为null;不存在。containsKey()方法用来判断是否存在某个键。

    HashMap类的使用:

    使用HashMap实现Map集合,需要重写hashCode()方法,这里有两个原则:

    1.不唯一原则:不用给每个对象生成唯一的哈希码,只要通过hashCode()方法生成的哈希码能够利用get()方法得到和put()方法添加的映射关系就可以;

    2.分散原则:分散不集中。

     1 package jihe;
     2 
     3 import java.util.Collection;
     4 import java.util.HashMap;
     5 import java.util.Iterator;
     6 import java.util.LinkedList;
     7 import java.util.Map;
     8 import java.util.Set;
     9 
    10 public class Example {
    11 
    12     public static void main(String[] args) {
    13         Map<String,String>  map=new HashMap<String,String>();
    14         map.put("1","Monday");   //添加
    15         map.put("2","Tuesday");
    16         map.put("3","Wensday");
    17 
    18         Set keySet = map.keySet();
    19         Collection valueCol = map.values();
    20         Set x=map.entrySet();
    21         Iterator i = keySet.iterator();
    22         while(i.hasNext()){
    23               System.out.println(i.next());
    24         }
    25         i= valueCol.iterator();
    26         while(i.hasNext()){
    27               System.out.println(i.next());
    28         }
    29         i=x.iterator();
    30         while(i.hasNext()){
    31                Map.Entry en=(Map.Entry)i.next();
    32                String  key=(String)en.getKey(); 
    33               String  value=(String)en.getValue();
    34               System.out.println(key+" "+value);
    35         }
    36     }
    37 }

    TreeMap在添加、删除、定位映射关系上,性能比HashMap要差。适用于有序集合。

    以上内容是对Map集合的一个初步了解,我会在后期继续补加实际运用的代码。

    每天都要进步一点,积少以成多。。。
  • 相关阅读:
    JavaScript字符串和字符数组
    JavaScript数组&类数组转换
    JavaScript判断值是否是NaN
    JavaScript中七种数据类型·中·一
    QRcode.js 生成二维码
    你不知道的JavasScript上篇·第五章·原型·下
    你不知道的JavasScript上篇·第五章·原型·上
    你不知道的JavasScript上篇·第四章·混合对象·类
    你不知道的JavasScript上篇·第三章·对象
    Vue2.x之父子组件数据传递
  • 原文地址:https://www.cnblogs.com/zxcjj/p/5546924.html
Copyright © 2011-2022 走看看