Java——List Set Map 容器及迭代器

List

List 是有序、可重复的容器。

有序:List中每个元素都有索引标记。可以根据元素的索引标记(在list中的位置)

访问元素,从而精确控制这些元素。

可重复:List 允许加入重复的元素。更准确的讲,List通常允许满足e1,equals(e2)

的元素重复加入容器

List 接口常用的实现类有3个:ArrayList LinkedList Vector

ArrayList底层是用数组实现的存储 

特点:查询效率高,删除效率低,线程不安全。与数组相比,ArrayList可以扩容

LinkedList底层是用双向循环链表的存储 

特点:查询效率低,增删效率高,线程不安全。

Vector 底层是用数组实现的List

特点:线程安全,效率低

如何选择ArrayList LinkedList Vector?

1.需要线程安全时,用Vector。

2.不存在线程安全问题时,并且 查找较多用ArrayList

3.不存在线程安全问题时,增加或删除元素较多用LinkedList

容器中的所有比较方式都是用的equals

Set

Set是无序、不可重复的容器。

set 和list 接口都是Collection的子接口

set中没有索引,若要查找则只能遍历

Set接口常用的实现类有2个:HashSet TreeSet

HashSet底层实际是用HashMap实现的

TreeSet底层实际是用TreeMap实现的

Map

Map就是用来存储“键值对”即Key-Value。

Map类中存储的“键值对”通过键来标志,所以“键对象”不能重复

Map接口的实现类有HashMap TreeMap HashTable Properties等

HashMap

底层实现采用了哈希表,这是一种非常重要的数据结构

数据结构中由数组和链表来实现对数据的存储,他们各有特点:

1.数组:占用连续空间,寻址容易,查询速度快。但是增加和删除效率非常低。

2.链表:占用空间不连续。寻址困难,查询速度慢。但是,增加和删除效率非常高。

若利用数组和链表的优点即哈希表,其本质就是数组+链表

PS:java中规定两个内容相同(equals()为true)的对象必须具有相同的hashCode。

TreeMap

是红黑二叉树的典型表现,一般需要在排序的时候才使用TreeMap

HashMap 与HashTable区别:

HashMap:线程不安全,效率高。允许key 或value 为null

HashTable:线程安全,效率低。不允许key 或value 为null

 

 

迭代器

迭代器为我们提供了统一的遍历容器(list map set)的方式,测试如下:

package cn.sxt.collection;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
 * 测试迭代器
 * @author l
 *
 */
public class TestIterator {
	public static void main(String[] args) {
		 testIteratorList();
		 testIteratorSet();
		 testIteratorMap();
	}
	//遍历List
	public static void testIteratorList(){
		
		
		List<String> l = new ArrayList<>();
		l.add("a");
		l.add("b");
		l.add("c");
		for(Iterator<String> iter =l.iterator();iter.hasNext();){
			String temp = iter.next();
			System.out.println(temp);
		}
	}
	
	//遍历Set
	public static void testIteratorSet(){
		
		
		Set<String> l = new HashSet<>();
		l.add("a");
		l.add("b");
		l.add("c");
		for(Iterator<String> iter =l.iterator();iter.hasNext();){
			String temp = iter.next();
			System.out.println(temp);
		}
	}
	//遍历Map
	public static void testIteratorMap(){
		
		
		Map<Integer,String> l = new HashMap<>();
		l.put(1, "li");
		l.put(2, "wang");
		l.put(3, "www");
		Set<Entry<Integer,String>> ss = l.entrySet();
		for(Iterator<Entry<Integer,String>> iter =ss.iterator();iter.hasNext();){
			Entry<Integer, String> temp = iter.next();
			System.out.println(temp);
		}
	}
}

运行结果:

a
b
c
a
b
c
1=li
2=wang
3=www

文章仅用于个人学习,如有错误请指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值