集合

集合

1. 集合的三大接口:list,set,map

List 可以重复,有顺序。
set 不重复 ,没有顺序,
Map 健值对 健不能重复

2. List 的实现了ArrayList

默认集合的操作对象是Object 类型,可以保存任何类型的对象但在遍历的时候需要进行类型判断,比较麻烦,一般我们在使用的时候是泛型集合
泛型集合: 在集合定义的时候,通知集合允许保存的数据类型。
当使用的是集合的时候就只能保存同一个数据类型,在获取集合对象的时候也不需要进行类型判断
List 集合名称 = new ArrayList();

3. List的常用方法

Add() 在集合的最后添加对象
Add(index,obj) ; 在指定的位置插入对象
Addall() 在一个集合中添加另一个集合的内容
Size()获取集合的元素个数
isEmpty() 判断集合中是否存在内容
Remove() 删除单个对象,删除对象的原则是判断是否是同一个对象而对象的值是否相同
Contains() 判断集合中是否包含某一个对象

集合的遍历
Iterator()迭代器可以遍历所有的集合类型(list,set,map)
for循环只能遍历list 的内容
案例

//创建一个学生的集合
		List<Student> stuList = new ArrayList<Student>(); 
		//添加对象
		Student stu1 = new Student("张三","女");
		Student stu2 = new Student("李四","男");
		Student stu3 = new Student("王五","女");
		Student stu4 = new Student("赵柳","男");
		Student stu5 = new Student("李四","男");
		Student stu6 = stu3;
		stuList.add(stu1);
		stuList.add(stu2);
		stuList.add(stu3);
		stuList.add(stu5);  //stu5 和 stu2 不叫重复对象,只是属性值刚好相同
		stuList.add(stu6);  //添加重复的对象  stu6 == stu3
		stuList.add(2, stu4); //在指定的位置插入对象 
 		
		//查询集合中的元素个数 如果size ==0表示集合中没有内容
		int size =stuList.size();
		System.out.println("集合中的元素个数:" + size);
		//判断集合元素是否为空
		boolean isEmpty =stuList.isEmpty();
		System.out.println("是否为空:" + isEmpty);
		//移除某一个元素
		stuList.remove(stu6);  //移除的是重复对象的第一个
		stuList.remove(stu5);  
		//判断某一个对象是否存在
		Student check_stu = new Student("张三","女");
		boolean isHave =stuList.contains(check_stu);
		System.out.println("isHave:"+ isHave); //false 同名同性别不一定是同对象
		check_stu = stu1;  //check_stu  ==  stu2;两个对象是相同的 
		isHave = stuList.contains(check_stu);
		System.out.println("isHave:"+ isHave); //true
		
		//遍历:所有的集合类型都可以采用iterator的方式便利
		Iterator<Student> stuIterator = stuList.iterator();
		while(stuIterator.hasNext()){
			Student temp_stu = stuIterator.next();
			System.out.println(temp_stu);
		}
		//list 特别的遍历  利用for循环或foreach都可以
		System.out.println("===================");
		for(int i =0;i<stuList.size();i++){
			Student stu = stuList.get(i);
			System.out.println(stu);
		}

4. List的三个实现类的区别和联系

LinkedList 底层是由链表实现,在增加删除元素的时候要快,但遍历要慢
因为LinkedList多实现了接口所有方法要比ArrayList要多
ArrayList 底层是数组实现默认容量是10 ,扩容1.5倍. 遍历要快,增加删除要慢
同时线程不安全,效率高
Vector 底层也是数组实现,默认容量10,扩容2被,遍历要快,增加删除要慢
同时线程安全,效率低

5.Set 集合

Set stuSet = new HashSet();
无序,不可重复
不可重复的判断规则是:首先调用对象的hashCode ,如果HashCode相同,则调用eqals方法

常用方法和List 相同的: 重点的方法: add ,remover ,container ,iterator遍历
Set 不支持for循环遍历只能用iterator遍历

HashSet 和TreeSet的区别和联系
HashSet与TreeSet接口的一点不同,HashSet 保存的数据是无序的,TreeSet保存的数据是有序的
利用TreeSet保存自定义类对象的时候,自定义所在的类一定要实现Comparable接口,否则无法排序
TreeSet 依靠的是Comparable 来区分重复数据;HashSet 依靠的是hashCode()、equals()来区分重复数据
里面都不允许保存重复数据。
在这里插入图片描述

6. Map集合

Map保存数据的方法以键值对的方式去保存,键不能重复,值可以重复
Map的常用方法
Put() 在集合中保存数据
Get() 根据KEY获取VALUE的信息
KeySet() 获取所有的KEY
VALUES() 获取所有的value
isEmpty 判断集合的的元素是否为空
Size() 获取Map的元素个数

//key 名字    value 家庭住址
		Map<String,String> strMap = new HashMap<String,String>();
		strMap.put("张三", "河北省石家庄兴华大街100号");
		strMap.put("李四", "河北省唐山市兴华大街110号");
		//查看一共有多少个学生信息 size()
		int stusize = strMap.size();
		System.out.println("一共有:"+stusize+"学生的信息");
		//查询某一个学生的家庭住址containKey  get
		String findname = "王五";
		if(strMap.containsKey(findname))
		{
			String address = strMap.get(findname);
			System.out.println(findname +"家庭住址:"+ address);
		}else{
			System.out.println("没有找到"+findname+"的信息");
		}
		//修改王五的家庭住址
		System.out.println("替换学生的信息:");
		String newname ="王五";
		String newaddress="河南省驻马店市政府街100号";
		//strMap.put(newname, newaddress);
		strMap.replace(newname, newaddress);
		
		//把李四的信息移除
		String removename = "李四";
		if(strMap.containsKey(removename)){
			strMap.remove(removename);
			System.out.println(removename +"移除成功");
		}else{
			System.out.println(removename +"不存在,不能移除");
		}
		//显示所有的学生的地址
		Iterator<String> nameIter= strMap.keySet().iterator();
		System.out.println("姓名\t地址");
		while(nameIter.hasNext()){
			String name = nameIter.next();
			String address = strMap.get(name);
			System.out.println(name+"\t"+address);
		}
		//情况所有的元素
		strMap.clear();
		System.out.println("还有没有学生信息 :"+ strMap.isEmpty());
		System.out.println("Map结束");

遍历map的方法有三种<循环key,循环values,循环map对象>

		//第一种:遍历可以  keyset()
		Set<String> keySet =  stuMap.keySet();
		Iterator<String> keyIter = keySet.iterator();
		while(keyIter.hasNext()){
			String key = keyIter.next();
			//通过key获取map中的value
			Student stu = stuMap.get(key);
			System.out.println(key +"   " + stu);
		}

		//第二种:遍历vlaues
		System.out.println("所有的VALUES");
		Collection<Student>  stuColl = stuMap.values();
		Iterator<Student> stuIter = stuColl.iterator();
		while(stuIter.hasNext()){
			Student stu = stuIter.next();
			System.out.println(stu);
		}


		//第三种: 遍历KEY-VALUE对象  
		System.out.println("所有的entry (key+ value)");
		Set<Entry<String,Student>> entrySet =  stuMap.entrySet();
		Iterator<Entry<String,Student>> entryIter = entrySet.iterator();
		while(entryIter.hasNext()){
			Entry<String,Student> entry = entryIter.next();
			String key = entry.getKey();
			Student student = entry.getValue();
			System.out.println(key+"    "+ student);
		}

7. Map的实现类的区别

HashMap
根据键的hashCode值存储数据,只允许一条记录的键为null,速度快,线程不安全
Hashtable
常用功能与HashMap类似,速度慢,线程安全
LinkedHashMap
是HashMap的一个子类,保存了记录的插入顺序
TreeMap
是SortedMap接口的实现,key有序以”二叉树"的格式存储
在这里插入图片描述

8.Collection 和Collections 的区别

Collection是一个接口,是List和Set的父接口,它里面保存的数据的特点是:无序,且重复
Collections是一个工具类,不能实例化,提供了一些静态的方法,用于是实现对于集合的一些常用功能。
在这里插入图片描述
集合中保存的都是对象的引用
在这里插入图片描述
Proerties ,Queue,Stack

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值