Java高级特性:集合和泛型

集合和泛型

学习集合要求掌握集合容器的:增加 删除 修改 查询(CRUD) 判断 遍历 这6种操作。

1.List, set, map 是不是都是继承与collection

不是,集合被分成Collection和Map两类,

Collection,List, Set,,Map都是接口,ArrayList和HashMap是他们的具体实现类

正常只使用ArrayList和HashMap

在这里插入图片描述

2.List集合和Set的区别

集合存储的不是基本数据类型而是对象

List接口存储一组不唯一,有序(插入顺序) 的对象

Set接口存储一组不唯,无序的对象

3.ArrayList和LinkedList的区别

ArrayList长度可变的数组,在内春中分配来连续的空间,遍历元素和随机访问元素的效率比较高

LinkedList采用链表存储方式,插入、删除元素时效率比较高

4.Set集合是如何保证存储数据的唯一性的

Set如何保证数据的唯一性:hashCode(),equals()

当给hashset中存放元素的时候会先调用对象的hashCode方法,计算哈希值,根据哈希值来决定当前对象在集合中的存储位置。

在存储时,如果两个值哈希值相同,调用equals方法,判断两个值是否相同,相同就不会继续存储,不同则会在

相同位置再开一个空间存储

5.HashMap存储数据的特点

特点:一次存一组数据,key一定要保证唯一,value是可以重复的

Map接口存储一组键对象,提供key和value的映射

Collection接口下的所有集合只能保存对象,但无法维护对象和对象之间的对应关系,统称为单列集合

Map集合主要用来保存具有一定对应关系的数据,这个一组对象之间有一定的对应关系,因此把Map集合称为双列集合

6.如何对HashMap进行遍历

1.使用keySet(),将key全部提取组成一个set集合,再通过foreach循环取出来

2.使用entrySet(),获取map中所有的键值对组成一个set集合,在foreach中通过getKey()和getValue()拿到key,value

ArrayList

package collection1;
import java.util.ArrayList;
import java.util.List;
public class Demo {
	public static void main(String[] args) {
//		List接口的实现类:ArrayList、LinkedList 
//		ArrayList长度可变的数组,在内春中分配来连续的空间,遍历元素和随机访问元素的效率比较高
//		LinkedList采用链表存储方式,插入、删除元素时效率比较高
//		存储的数据是有序的,可重复的
		List list = new ArrayList();	//创建一个集合,这个集合底层是一个object类型的数组
		
//		添加数据
		list.add("孔明");
		list.add("刘备");
		list.add(100);
		list.add(200);
		list.add(300);
		System.out.println(list);
		
//		删除数据,有两种方法
		list.remove(2);		//1.根据下标删除,只要是数字就默认是下标
		list.remove("刘备");	//2.根据内容删除,只会删除第一个
//		Integer.valueOf():因为数字默认是下标,所以要将数字转换成对象操作
		list.remove(Integer.valueOf(200));
		System.out.println(list);
		
//		修改,注意最大的下标,使用add会扩容,使用set不会扩容
		list.set(0, "关羽");		//通过下标来修改内容
		System.out.println(list);
		
//		查询,get方法一定有返回值
		Object obj = list.get(0);
		System.out.println(obj);
		
//		判断
//		判断集合中是否包含一个对象,返回boolean值
		boolean c = list.contains(10);
		System.out.println(c);
		
//		长度:size()
		int size = list.size();
		System.out.println(size);
		
//		遍历 = 循环
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
        
		for (Object o : list) {
			System.out.println(o);
		}	
	}
}

HashSet

package collection3;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Demo_set {
	public static void main(String[] args) {
//		Set集合存储数据的特点:无序,不可重复,带hash的都是无序
//		Set如何保证数据的唯一性:hashCode(),equals()
//		当给hashset中存放元素的时候会先调用对象的hashCode方法
//		计算哈希值,根据哈希值来决定当前对象在集合中的存储位置。
//		在存储时,如果两个值哈希值相同,调用equals方法,判断两个值是否相同
//		相同就不会继续存储,不同则会在相同位置再开一个空间存

		Set set = new HashSet();
		set.add("msksabb");
		set.add("kadfghk");
		set.add(354656);
		set.add(346351);
		System.out.println(set);
		
//		Set没有get方法
//		Set不能用for循环取出内容,因为他是无序的没有下标
//		set集合的遍历方法:foreach,迭代器
		for (Object o : set) {
			System.out.println(o);
		}
		
//		迭代器
		Iterator i = set.iterator();	//获取迭代器对象
		while (i.hasNext()) {
			Object obj = i.next();
			System.out.println(obj);
		}	
	}
}

HashMap

package collection4;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Demo {
	public static void main(String[] args) {
//		Map集合
		Map map = new HashMap();
		
//		新增
		map.put("lili", "南京");
		map.put("baba", "上海");
		map.put("mama", "扬州");
		System.out.println(map);
		
//		删除
		map.remove("lili");	//通过key删除内容
		System.out.println(map);
		
//		修改:Map中没有提供修改的方法,但我们可以利用可以的唯一性进行修改
		map.put("baba", "杭州");
		System.out.println(map);
		
//		查询:根据key获取value的数值,get(key)
		Object obj = map.get("baba");
		System.out.println(obj);
		
//		size()获取key-value对应关系的个数
		int size = map.size();
		System.out.println(size);
		
//		判断:可以判断key或者判断value
//		判断map是否包含指定的key,有就返回true
		boolean containsKey = map.containsKey("baba");
		System.out.println(containsKey);
//		判断map是否包含指定的value,有就返回true
		boolean containsValue = map.containsValue("杭州");
		System.out.println(containsValue);
        
//		判断map集合是否为null,是就返回trun
		boolean empty = map.isEmpty();
		System.out.println(empty);
		
//		遍历:将容器中的每个值取出来
		Set keys = map.keySet();	//将map中所有的key拿出来,组成一个set集合
		for (Object key : keys) {
//			通过key来获取对应的值
			Object value = map.get(key);
			System.out.println(key+" ======== "+value);
		}
		
		System.out.println("=======================");
		
//		entry是一个key,value结构,但他提供get方法
//		Set集合现在存的是一组一组的键值对
		Set entrys = map.entrySet();	//entrySet()将Map容器转换成Set容器
		for (Object en : entrys) {
//			强制类型转换:将Object转换成entry类型
			Entry e = (Entry)en;
//			通过getKey()拿到key
			Object key = e.getKey();
//			通过getValue()拿到value
			Object value = e.getValue();
			System.out.println(key+" ======== "+value);
		}
	}
}

泛型

1:介绍

当把数据存储到集合中后,数据就会提升到Object类型,在取出的时候,取出来的数据依然Object类型,如果要使用对象特有功能,特有数据时,就需要向下转型,在取出集合中的元素时,由于元素的数据类型不统一,导致在转型的时候可能会报ClassCastException,为了不报异常可以使用泛型,在集合定义的时候让数据类型统一

2:简单运用

泛型技术,是编译时期技术,在编译源码的时候,会判断泛型指定的类型统一问题,当编译完成之后,生成的class文件中是没有泛型内容。

语法格式

<>尖括号中书写的类型是引用数据类型。不能是基本数据类型。

package collection;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {
	public static void main(String[] args) {
//		这个集合只能存储字符串
		List<String> list = new ArrayList<String>();
		
//		map的key只能是字符串,value是Object
		Map<String, Object> map = new HashMap<String, Object>();
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值