码迷,mamicode.com
首页 > 其他好文 > 详细

Set、List、Map的遍历总结

时间:2015-04-28 09:50:11      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:hashmap   linkedlist   arraylist   iterator   对象   

今天晚上本来想看看泛型,后来看到集合类这里,因为之前一直对集合类就有点阴影,老是搞混淆,索性就复习下集合类的几种遍历方式吧,顺便做下笔记,以备以后回头查看。

总之来说,java的集合类都是实现Collection接口

Collection<--List<--Vector

Collection<--List<--ArrayList

Collection<--List<--LinkedList

Collection<--Set<--HashSet

Collection<--Set<--HashSet<--LinkedHashSet

Collection<--Set<--SortedSet<--TreeSet

Set(集):(HashSet)无序不重复

List(ArrayList和LinkedList)(列表):无序可重复

Map(映射,键值对):(HashMap)有序key值不重复

Set总结:

1. Set实现的基础是Map(HashMap);

2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;

Set遍历两种方法:

<span style="font-size:12px;">public static void testSet(){
	//无序不重复
	Set<String> set = new HashSet<String>();
	set.add("我是哈哈");
	set.add("我是哈哈");
	set.add("我是幕燃");
	set.add("我是幕燃2");
	
	//遍历方法一 Iterator
	Iterator<String> it = set.iterator();
	while(it.hasNext()){
		String str = it.next().toString();
		System.out.println(str);
	}
	
	//遍历方法二 for
	for (String str: set) {
		System.out.println(str);
	}
}</span>

List总结:

1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];

2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

3. 所有的List中可以有null元素,例如[ tom,null,1 ];

4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

List遍历的三种方式:

LinkedList:

<span style="font-size:12px;">public static void testLinkedList(){
	//有序可重复
	List<String> list = new LinkedList<String>();
	list.add("我是哈哈");
	list.add("我是哈哈");
	list.add("我是幕燃");
	list.add("我是幕燃2");
	
	//遍历第一种  get
	for (int i = 0; i < list.size(); i++) {
		System.out.println(list.get(i));
	}
	
	//遍历第二种 Iterator
	Iterator<String> it = list.iterator();
	while(it.hasNext()){
		String str = (String)it.next();
		System.out.println(str);
	}
	//遍历第三种 for
	for (String str : list) {
		System.out.println(str);
	}
}</span>

ArrayList

public static void testArrayList(){
	//ArrayList 有序允许重复
	List<String> list = new ArrayList<String>();
	list.add("我是小颜");
	list.add("我是小颜");
	list.add("我是幕燃");
	list.add("我是幕燃2");

	//遍历第一种  get
	for (int i = 0; i < list.size(); i++) {
		System.out.println(list.get(i));
	}
	
	//遍历第二种 Iterator
	Iterator<String> it = list.iterator();
	while(it.hasNext()){
		String str = (String)it.next();
		System.out.println(str);
	}
	//遍历第三种 for
	for (String str : list) {
		System.out.println(str);
	}
}
Map遍历的五种方式:

public static void testMap(){
	//Map 无序key值不重复
	Map<String, String> map = new HashMap<String, String>();
	map.put("zhangsan", "我是张三");
	map.put("devin", "我是dw");
	map.put("haha", "我是哈哈");
	
	//遍历方法一 map.keySet + for
	for(String key : map.keySet()){
		System.out.println("key="+ key + ",value=" + map.get(key));
	}
	
	//遍历方法二map.keySet +Iterator
	Iterator<String> iterator = map.keySet().iterator();
	while(iterator.hasNext()){
		String key1 = iterator.next().toString();
		System.out.println("key="+ key1 + ",value=" + map.get(key1));
	}
	
	//遍历方式三 map.values
	for (String key2 : map.values()) {  
		System.out.println("value=" + key2);
	}
	
	//遍历方式四  map.entrySet + for
	for(Map.Entry<String,String> entry : map.entrySet()){
		System.out.println("key="+ entry.getKey() + ",value=" + entry.getValue());
	}
	
	//遍历方式五map.entrySet() + Iterator
	Iterator <Map.Entry<String,String>> entry = map.entrySet().iterator();
	while(entry.hasNext()){
		Map.Entry<String, String> ent = entry.next();
		System.out.println("key="+ ent.getKey() + ",value=" + ent.getValue());
	}
	
}

在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?
这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在 索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator 对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。
最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效 率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

Set、List、Map的遍历总结

标签:hashmap   linkedlist   arraylist   iterator   对象   

原文地址:http://blog.csdn.net/dream_angel_z/article/details/45318223

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!