JAVA集合的知识点复习

集合框架复习

集合特点:

  • 用于存储对象的容器
  • 集合的长度是可变的
  • 集合中不可以存储基本数据类型值

集合容器因为内部的数据结构不同,有多个容器,不断的向上抽取,就形成了集合框架

图中虚线代表着接口,实线代表着类。

Map: 一次添加一堆元素,Collection 一次添加一个元素
Map也称为双列集合,Collection集合称为单列集合。
其实map集合中存储的就是键值对
map集合中必须保证键的唯一性

集合框架中有着两大顶层接口:

1. Collection:

   |--List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复
       |--vector:内部是数组数据结构,是同步的。增删,查询都很慢!     
 		|--ArrayList:内部是数组数据结构,是不同步的,替代了Vector,查询的速度快   
		 |--LinkedList:内部是链表数据结构,是不同步的,增删元素的速度很快

   |--Set: 元素不能重复,通常无序(也有可能会出现有序的,几率不大)。
  		 |--HashSet:  内部数据结构是哈希表,是不同步的
    哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,
    当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,
    然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表
         |--TreeSet:可以对Set集合中的元素进行排序,是不同步的。   (实现Comparble接口,通过compareTo进行排序)
    	    判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存

TreeSet对元素进行排序的方式一:
让元素自身具有比较功能,就需要实现Comparable接口,覆盖compareTo方法.

如果不要按照对象中具备的自然排序进行排序,如果对象中不具备自然顺序。怎么办?
可以使用TreeSet集合的第二种排序方式
让集合自身具备比较功能,定义一个类实现Comparator(比较器)接口,覆盖compare方法.
将该类对象作为参数传递给TreeSet集合的构造函数

2. Map:

>     |--Hashtable: 内部结构是哈希表,是同步的,不允许null作为键,null做值。 	
           |--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合
>     |--HashMap :内部结构是哈希表,不是同步的,允许null作为键,null作为值
>     |--TreeMap:  内部结构是二叉树,不是同步的,可以对Map集合中的键进行排序

集合框架中的迭代器和工具类:

  • Collections:工具类:
    static Enumeration enumeration(Collection c) 返回指定集合的枚举。
    我在合并多个流的时候用这个函数返回ArrayList集合的枚举,它还有其他特别好用的方法,这里不一一列举了,我就列举了这个我在作业中比较常用到的方法,当然,我用vector自己方法也可以返回枚举,然后传递给SequenceInputStream

  • Arrays:数组工具类

  • 迭代器:
    该对象必须依赖于具体容器,因为每一个容器的数据结构都不同
    所以该迭代器对象是在容器中进行内部实现的
    对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器对象即可,也就是iterator方法。
    Iterator接口就是对所有的Collection容器进行元素取出的公共接口

集合取出元素的方法:

  • Collection:通过迭代器

  • Map:

    1.通过entrySet
    2.通过KeySet
    

复习作业:

1.通过迭代器来取出ArrayList的元素
2.通过keySet以及entrySet获取Hashmap的元素

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class 复习Demo {
	/*复习:
	 * Arraylist,LinkedList
	 * Hashset,Treeset
	 * Hashmap,treemap
	 * 创建以上集合存入元素并取出
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Collectionlist_ArrayList();
		//创建ArrayList并取出元素
		Collectionlist_LinkedList();
		//创建LinkedList并取出元素

		Map_Hashmap();
		//创建hashmap并取出元素

		
	}

	public static void Map_Hashmap() {
		// TODO Auto-generated method stub
		
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("xiaoming", 5);
		map.put("wanger", 17);
		map.put("qianyu", 19);
		
		output_entryset(map);
		output_KeySet(map);
	}



	public static void output_KeySet(Map<String, Integer> map) {
		// TODO Auto-generated method stub
		Set<String> set = map.keySet();
		Iterator<String> it = set.iterator();
		while(it.hasNext()) {
			String key = it.next();
			int vaule = map.get(key);
			System.out.println("通过KeySet获取的键值对:"+"name="+key+":::"+"age="+vaule);
		}
	}

	public static void output_entryset(Map<String, Integer> map) {
		// TODO Auto-generated method stub
		Set<Map.Entry<String,Integer>> set = map.entrySet();
		Iterator<Map.Entry<String, Integer>> it = set.iterator();
		while(it.hasNext()) {
			Map.Entry<String,Integer> st = it.next();
			String key = st.getKey();
			int vaule = st.getValue();
			
			System.out.println("通过enrtySet获取的键值对:"+"name="+key+":::"+"age="+vaule);
			
		}
		
	}

	public static void Collectionlist_LinkedList() {
		// TODO Auto-generated method stub
		LinkedList<String> Ll = new LinkedList<>();
		Ll.add("哈哈");
		Ll.add("世界");
		for( Iterator<String> it= Ll.iterator();it.hasNext();) {
			System.out.println("LinkedList="+it.next());
		}
	}

	public static void Collectionlist_ArrayList() {
		// TODO Auto-generated method stub
		ArrayList<String> Ar = new ArrayList<>();
		Ar.add("哈哈");
		Ar.add("世界");
		
		for( Iterator<String> it= Ar.iterator();it.hasNext();) {
			System.out.println("ArrayList="+it.next());
		}
	}

}

输出结果:

ArrayList=哈哈
ArrayList=世界
LinkedList=哈哈
LinkedList=世界
通过enrtySet获取的键值对:name=xiaoming:::age=5
通过enrtySet获取的键值对:name=qianyu:::age=19
通过enrtySet获取的键值对:name=wanger:::age=17
通过KeySet获取的键值对:name=xiaoming:::age=5
通过KeySet获取的键值对:name=qianyu:::age=19
通过KeySet获取的键值对:name=wanger:::age=17

总结两种Map的取值方式:

  1. 第一种:通过KeySet的来获取,通过keySet返回包含的键的Set视图给Set<>,然后就可以通过迭代器来取值。

  2. 第二种:通过entryset来获取,通过entryset返回给Set,这里注意Set的泛型,Map.Entry<String,Integer>,用迭代器循环,通过将迭代器下一个元素的值传递给Map.Entry<String,Integer>类型,然后直接通过getkey方法和getvalue方法取值。


  3. 因为我怕有时候忘记,所以代码写的比较简单,方便自己快速复习,如果你觉得可以的话关注下,博客新人。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值