【Java学习笔记】集合

-----------------------------------------------个人初学,如有错误,欢迎指正-----------------------------------------------
Java学习笔记之集合

一、简介
Java的集合包含两部分Collection和Map两部分。其中Map是以键—值对的映射关系实现数据存储的。常用的集合类有,Collection中已经实现的接口List,Set以及相应实现的子类。Map中的HashMap和TreeMap。下面是一张简单的集合框架体系图:


二、集合中常用的基本方法
2.1Collection
        2.1.1Collection之Set
        Set最大的特点就是存储的元素不重复。你可以把Set理解为过滤器,它会主动帮你过滤掉数据中的重复元素,对于相同的数据,存储仅且存储一次。
        1>子类HashMap,它根据Hash算法随机生成数据的地址,实现无序的存储,如果你遍历HashMap中的元素,元素的输出顺序很可能与录入的顺序不同。
        2>子类TreeSet,与HashMap不同的是,TreeSet对存入的数据进行了排序,排序的方法可以由用户实现Comparable接口后自定义,因此外部可以有序的遍历成员,成员的输出顺序与用户实现Comparable接口后自定义的排序方法一致
        2.1.2Collection之List
        List可以理解为加强版的数组,它可以基于索引(下标)对成员实现随机访问。与数组不同的是List的大小会根据你存入的元素多少自动分配,你可以理解为,List是“按需非配”,而且List还提供了比数组更多的功能。
        1>子类ArrayList,可以根据索引快速的操作元素(同数组一样)。
        2>子类LinkList,可以对任意位置的元素进行操作,但是对基于索引的成员访问比较耗时。
2.2Map
        Map是以键-值对映射存储数据的,存储的每个键—值对中,键必须具有唯一性,根据给定的键获取成员的值。
        2.2.1Map之HashMap
        HashMap满足通用的Map需求,内部无序。
        2.2.2Map之TreeMap
        TreeMap可以按键值对元素进行有序遍历,遍历的顺序与用户实现Comparable接口对Map的键自定义排序的顺序一致。

三、使用方法
        下面是一些程序示例,以便帮助大家更好的理解集合
        3.1HashSet
//---------------HashSet存储的数据不重复------------------------
	private static void MyHashSet(Set mySet){
		
		//向mySet中存入50以内不重复的8个数
		Random rd = new Random();
		int num,count = 0;
		while(mySet.size() < 8){
			num = rd.nextInt(50);
			mySet.add(num);
			count++;
		}
		System.out.println("生成五个不重复的数,while循环共执行了【 "+count+"】次");
		
		//使用迭代器遍历mySet
		System.out.println("mySet数据:");
		Iterator it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
		
		mySet.clear();//清空mySet
		
		//使用remove方法删除mySet的数据
		int k = 0;
		while(k<count){//重新添加数据
			mySet.add(k*3);
			k++;
		}
		System.out.println("mySet数据更新后:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
		mySet.remove(5);
		System.out.println("\n执行mySet.remove(5)后,mySet数据:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
		//使用remove方法删除mySet的数据
		mySet.clear();
		while(count > 0){//重新添加数据
			mySet.add(count--);
		}
		
		System.out.println("\n\nmySet数据更新后:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
		mySet.remove(5);
		System.out.println("\n执行mySet.remove(5)后,mySet数据:");
		it = mySet.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		
	}
运行结果:

    
    3.2HashMap
/*
	 * HashMap操作
	 * 
	 */
	private static  void MyHashMap(Map myMap){
	//---------------HashMap以键值对(key-value)存储数据------------------------
	//其中,key关键字不能重复,必须具有唯一性。value值可以重复
		Random rd = new Random();
	
		System.out.println("myMap中的数据(key-value):");
		for(int i=0; i< 10; i++){
			//使用put方法,向map中添加数据
			String key = "A"+i;
			int value = rd.nextInt(100);
			myMap.put(key,value);
			System.out.println(key+"-"+value);	
		}
		
		//使用containsKey方法,判断map中是否包含对应关键字
		boolean IsContain =  myMap.containsKey("A3");
		System.out.println("myMap 中包含 A3关键字吗:"+IsContain);

		//使用containsValue方法,判断map中是否包含对应值
		IsContain =  myMap.containsValue(50);
		System.out.println("myMap 中包含 50这个数值吗:"+IsContain);
		
		//使用containsValue方法,判断map中是否包含对应值
		Object value = myMap.get("A5");
		System.out.println("关键字A5对应的值是:"+value);
		value = myMap.get("A10");
		System.out.println("关键字A10对应的值是:"+value);
		
		
	}
运行结果:
<img src="https://img-blog.csdn.net/20160221134425293" alt="" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" />

    3.2ArrayList
/*
	 * ArrayList操作
	 * 
	 */
	private static void MyArrayList(List myList){
		
		Random rd = new Random();
		for(int i = 0; i< 10; i++){
			myList.add(rd.nextInt(100));
		}
		
		
	//---------------使用迭代器遍历ArrayList------------------------
		System.out.println("使用迭代器遍历ArrayList");
		Iterator it = myList.iterator();//得到迭代器
		while(it.hasNext()){//还有下一个元素
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
		
	//---------------使用for循环遍历ArrayList------------------------	
		System.out.println("使用for循环遍历ArrayList");
		for(int k = 0; k<myList.size(); k++){
			System.out.print(myList.get(k)+" ");
		}
		System.out.println("\n");
		
	//---------------使用集合提供的方法排序List------------------------
		Collections.sort(myList);
		System.out.println("\n排序:");
		it = myList.iterator();//得到迭代器
		while(it.hasNext()){//还有下一个元素
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
	
	//---------------得到指定元素------------------------	
	//使用get方法得到集合中指定位置的元素	
	System.out.println("第3个元素是:"+myList.get(2));	
	
	//---------------删除指定下标的元素------------------------	
	System.out.println("删除的第4个元素是:"+myList.get(3));	
	myList.remove(3);//使用remove方法删除集合中的元素
	System.out.println("删除后的集合:");
	it = myList.iterator();//得到迭代器
	while(it.hasNext()){//还有下一个元素
		System.out.print(it.next()+" ");
	}
	System.out.println("\n");
	}
运行结果:



     3.2ArrayList泛型操作
package exp;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

public class ArrayListDemo {

	public static void main(String[] args) {

		List<Integer> list = new ArrayList<Integer>();
		IntegerArr(list);
		List<String> list2 = new ArrayList<String>();
		StringArr(list2);
		List<StudentInf> list3 = new ArrayList<StudentInf>();
		ObjectArr(list3);
	}
	
	
	
	private static void IntegerArr(List<Integer> list){
		
		Random rd = new Random();
		for(int i =0; i< 10; i++){
			list.add(rd.nextInt(50));
		}
		
		System.out.println("ArrayList存储整形数值:");
		Iterator it =list.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
	}
	
	private static void StringArr(List<String> list){
		
		for(int i = 0; i< 10; i++){
			list.add("A"+i);
		}
		System.out.println("ArrayList存储字符串值:");
		Iterator it =list.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println("\n");
	}

	
	private static void ObjectArr(List<StudentInf> list){
		StudentInf stuInf;
		String[] name = {"刘雅","李佳","陈馨","张凯","王力"};
		String sex,sexStr = "男女";
		for(int i = 0; i< 5; i++){
			if(i < 3)
				sex = sexStr.charAt(1)+"";
			else
				sex = sexStr.charAt(0)+"";
			stuInf = new StudentInf(name[i],sex,"高三一班");
			list.add(stuInf);
		}
		
		System.out.println("ArrayList存储对象:");
		Iterator it =list.iterator();
		while(it.hasNext()){
			System.out.println(it.next().toString());
		}
		System.out.println("\n");
	}
	
}



	class StudentInf{
		private String name;
		private String sex;
		private String classmate;
		
		public StudentInf(){}
		
		public StudentInf(String name,String sex,String classmate){
			this.name = name;
			this.sex = sex;
			this.classmate = classmate;
		}

		@Override
		public String toString() {
			String inf;
			inf = "姓名:"+this.name+"\t  性别:"+this.sex+"\t班级:"+this.classmate;
			return inf;
		}
		
		
		
	}
运行结果:

所有结果都正确打印了

四、小结
        ArrayLsit有序,且可以存储重复数值。get(index)可以得到下标为index的对应数值。remove(index)则删除对应下标的值。add()方法可以向ArrayList里添加数据。
      Hashset无序,存放不重复的数值,remove(vaule)删除对应值为value的元素
      HashMap是以键值对存储数据,关键字具有唯一性,值可以重复。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值