java基础之集合List、Set和Map

集合

  1. Collection接口:List、Set、Queue接口

List接口的类中的元素是有序的,可重复的,允许多个null值。
List的已知实现类:ArrayList,LinkedList,vector

Set接口的类中的set方法存储一组无序的,不重复对象,可以存一个null。 Set的已知实现类:TreeSet、HashSet

  1. Map接口

HashMap (父:AbstractMap)–> LinkedHashMap
TreeMap (父:AbstractMap)
ConcurrentMap
Hashtable(父:Dictionary)–> Propertice

  • ArrayList,LinkedList,vector的区别

相同点:

ArrayList,LinkedList,vector都实现了List接口,都存储的是有序且可重复的元素

不同点:

1)ArrayList,vector底层都是用数组实现的List接口,查询速度快,增删速度慢。
LinkedList底层是用双向链表实现的,增删速度快,查询慢。

2)ArrayList的默认大小为0,当它第一次调用add()时,判断数组的默认大小为0则赋给它10,默认大小就为10.是以1.5倍的方式进行扩容的。
Vector是以2倍的方式扩容。 LinkedList是双向链表,不需要进行扩容。
3)ArrayList,LinkedList是非线程安全的,Vector是线程安全的

  • HashMap和Hashtable的区别:

相同点:

HashMap和Hashtable都用于存放键值对,都实现了Map接口,HashMap和Hashtable的Key都是唯一的

不同点:

1)HashMap的父类是AbstractMap类,在java1.8前HashMap的底层是由数组+链表组成的,java1.8之后由数组+链表+红黑树组成的;当数组的长度>64且链表的阈值>> 8时,由链表转换成红黑树,当数组的长度>64且红黑树<6时,由红黑树转换成链表。
Hashtable的父类是Dictionary类,底层是由数组+链表组成的

2)HashMap支持键和值都可以为null,Hashtable不支持即键和值都不能为null。

3)HashMap的初始容量为16,以2倍的方式进行扩容。 Hashtable的初始容量为11,以2倍+1的方式进行扩容。

4)HashMap是非线程安全的,Hashtable是线程安全的,在方法上使用了Synchronized关键字修饰;

  • Map的3种迭代

迭代也叫遍历,是指将集合或数组中所有的元素一一访问一遍。
1) Keyset迭代

					Map map=new HashMap();
					map.put("m1",1);
					map.put("m2",2);
					Set set=map.KeySet();
					for (Object obj: set) { 
						Object key=obj;
						Object value=map.get(key);
					 }
  • 2)EntrySet 迭代(只能用于map)
					Map map=new HashMap();
        			map.put("1",2);
        			Set entry=map.entrySet();
        			for (Object obj:entry) {
           			 	Map.Entry e=(Map.Entry)obj;
            			Object key=e.getKey();
            			Object value=e.getValue();
       		 		}
  • 3) Iterator 迭代器迭代
					Map map=new HashMap();
				    map.put("m1",1);
				    map.put("m2",2);
				    Iterator iterator=keySet.iterator();
				    // iterator.hasNext()表示是否还有未迭代完的元素
				   while (iterator.hasNext()){		
				   // iterator.next()表示从集合中迭代出一个集合元素		
				       Object key=iterator.next();		
				       Object value=map.get(key); 
				  } 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值