鉴于考试临近,感觉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 }
运行结果:
由于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集合的一个初步了解,我会在后期继续补加实际运用的代码。