JavaEE学习之集合(二)

本文深入探讨了Java集合框架中的HashSet和HashMap,详细介绍了它们的特点、使用场景及内部工作原理,并展示了如何利用这些集合来提高程序的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要内容:HashSet集合、HashMap集合以及可变参数

1.HashSet集合类

HashSet是实现了Set接口的类,属于Set集合分支的一员,具备①去重②无序(存入集合的顺序和取出集合的顺序可能不一致)③无索引的特点。

HashSet的去重原理:

       规则:将新添加的元素(add.(Object o)与集合中的元素逐一比较,如果哈希值不同(hashCode()方法)则添加元素,如果哈希值相同,再用equals()方法判断,因此如果要实现添加对象的去重效果,就需要重写hashCode()和equals()方法,否则就会根据根类Object中的hashCode()和equals()方法判断是否存入元素重复。

Collections:一个工具类,成员方法主要是对集合进行操作。

int binarySearch(List list, T key) :二分查找元素;  根据传入的元素,在指定的集合对象中查找是否有元素存在;
void copy(List dest, List src) :复制集合; 把src集合中的所以元素赋值到dest集合中;
                       注意:dest集合中的元素个数要大于或者等于src集合中的元素个数;
void fill(List list, T obj) :填充集合; 把传入的元素(obj)全部填充到指定的list集合中;
void reverse(List list):反转集合;把传入的集合对象中的元素反转;
void shuffle(List list) :傻否; 随机打乱list集合中元素的位置;
void swap(List list, int i, int j) :交换集合中的元素; 把集合中索引i位置的元素和索引j位置的元素交换;
void sort(List<T> list):根据列表中元素的自然顺序进行排序;
void swap(List list, int i, int j) :交换集合中的元素; 把集合中索引i位置的元素和索引j位置的元素交换;

2.HashMap集合类

Map集合是所有双列集合的根接口---->HashMap<K,V>  K:键  V:值

        HashMap类实现了Map接口,这是一个新的集合体系与Collection并列存在,所以它所存储元素的方式与Collection完全不同HashMap类存储的是一对值(键与值),一个键对应一个值,其中键不允许重复,值可以重复,键的去重原理与签名所说的HashSet去重原理是一样的,因此也需要类重写hashCode()和equals()方法。

        常用方法:

映射功能:(添加)
            V put(K key, V value) :向Map集合中添加元素,若添加的元素键有重复,则把原Value替换成为新的Value;
    获取功能:
            V get(Object key) :根据传入的键找对应的元素值;
            int size() :获取Map集合中键值对的个数;
    判断功能:
            boolean containsKey(Object key) :判断集合中是否包含传入的键;
            boolean containsValue(Object value) : 判断集合中是否包含传入的值;
            boolean isEmpty() :判断集合是否为空;
    删除功能:
            void clear() :清空集合中的所有元素;
            V remove(Object key) :根据传入的键删除对应的值,并返回删除的值;

Map集合的遍历方式:

第一种:KeySet()方法,将Key值存入Set集合,再用for增强语句遍历Key值结合get(key)方法获取value。

HashMap<String,String> hm = new HashMap<>();
//添加键值对
hm.put("郭靖", "黄蓉");
hm.put("杨过", "小龙女");
hm.put("令狐冲", "任盈盈");

Set<String> keySet = hm.keySet();//获取set集合,里面有所有的key(键)
//遍历键 集合
for (String key : keySet) {
    //key 代表的是键
    String value = hm.get(key);//通过key(键) 取出对应的value(值)
    System.out.println(key+"="+value);
			}

第二种:entrySet() 方法,将键值存入Entry对象中,在对Entry对象遍历获取Key和Value.(这种方法更符合面向对象的思想)。

HashMap<String,String> hm = new HashMap<>();
//添加键值对
hm.put("郭靖", "黄蓉");
hm.put("杨过", "小龙女");
hm.put("令狐冲", "任盈盈");

//获取一个Set集合,里面存入的都是Entry对象, 每个entry对象都有一个键(key)和一个值(value)
Set<Entry<String, String>> entrySet = hm.entrySet();
//遍历键 集合
for (Entry<String, String> entry : entrySet) {  //遍历所有的entry对象
    String key = entry.getKey(); //取出entry中的键
    String value = entry.getValue();//取出entry中的值
}
3.可变参数

        本质:一个长度可变的数组(可以调用.length获取长度),当参数不确定的时候,类型明确,就用可变参数,在调用方法的时候更方便。

public static void main(String[] args) {
	//这里调用可变参数的方法,不需要传入一个数组,直接往里面传入数据就可以,相对来说方便很多
	int result = sum(1,2,3,4,5,6);
	}
	//可变参数:当参数不确定的时候,类型明确,arr就相当于是一个数组,这样写的好处是调用方法起来比较方便
	public static int sum(int...arr) {
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		return sum;
	}


        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值