Java第十七天

本文深入解析Java中可变参数的原理与使用,如sum方法示例,并介绍Collections接口的shuffle和addAll方法。重点讲解HashMap、Hashtable与LinkedHashMap的区别,以及Map遍历的两种方式。
摘要由CSDN通过智能技术生成

可变参数:

  • 语法 方法名(数据类型…变量名)

  • 原理:可变参数本质就是一个数组 根据传参数的个数不同 会创建不同长度的数组

    来存储这些参数 传递参数的时候 可以 0个 多个 都可以

注意事项

  1. 一个方法的参数列表 只能有一个可变参数
  2. 如果方法的参数有多个 ,那么可变参数必须在
  3. 特殊写法 object…obj
public static void main04(String[] args) {
		//int [] arr = {1,2,3,4,5};
		int sum  = sum(1,2,3,4,6,5,4);
		System.out.println(sum);
	}
		public static int  sum(int a, int...arr) {
			int sum = 0;
			for (int i = 0; i < arr.length; i++) {
			sum+=arr[i];
			}
			return sum;
		}	

collections

此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。

static voidshuffle(List list) 使用默认随机源对指定列表进行置换。
static voidshuffle(List list, Random rnd) 使用指定的随机源对指定列表进行置换。
static booleanaddAll(Collection c, T… elements)` 将所有指定元素添加到指定 collection 中。
public static void main(String[] args) {
		ArrayList<Integer> strings = new ArrayList<Integer>();
		Collections.addAll(strings, 1,2,3,5,4,6,7);//添加一些元素
	
	for (int i = 8; i < 13; i++) {
		strings.add(i);
	}
	Collections.shuffle(strings);//打乱顺序
	System.out.println(strings);
}

Map集合

  • 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

    此接口取代 Dictionary(字典) 类,后者完全是一个抽象类,而不是一个接口。

1.主要实现类:

  • HashMap、Hashtable和LinkedHashMap,但是Hashtable已经被HashMap淘汰。

2.HashMap< K , V >:

  • 存储数据采用哈希表结构(数组+链表/红黑树)元素存储顺序不能保证一致,由于要保证键的唯一、不重复,需要让键重写hashcode方法和equals方法。
  • 底层是一个哈希表,查询速度快。(JDK1.8版本之前 数组+链表,JDK1.8版本之后 数组+链表/红黑树)
  • HashMap是一个无序的元素集合,存储元素和取出元素顺序可能不一致。
方法:
  • public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
  • public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
  • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
  • boolean containsKey(Object key)判断集合中是否包含指定的键。
  • public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
  • public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
遍历方法一:

通过健找值得方式,使用KeySet方法获取所有的健。

实现步骤:
  1. 使用Map集合中得KeySet方法,把集合中所有key取出来,保存到一个set集合中。
  2. 使用集合set集合 获取Map集合中每一个Key。
  3. 使用key获取value。
public static void main(String[] args) {
    Map<String, Integer>  map=new HashMap<>();
    map.put("小刘", 165);
    map.put("小红", 167);
    map.put("小李", 175);
    //保存所有得健
    Set<String>  set=map.keySet();
    //遍历Set
    for (String key : set) {
        Integer value=map.get(key);
        System.out.println(value);
    }
}
输出:
    //175
    //165
    //167
遍历方法二:

使用方法Set<Map.Entry<K,V>> entrySet()

实现步骤:
  1. 使用Map集合中的方法entrySet把map集合中多个Entry取出来,存储到一个Set集合中。
  2. 遍历set集合,获取每一个Entry对象。
  3. 使用Entry对象中得方法getKey和GetValue 获取健和值。
public static void main(String[] args) {
    Map<String, Integer>  map=new HashMap<>();
    map.put("小红", 165);
    map.put("小刘", 167);
    map.put("小李", 175);
    //1获取Set集合 保存键值对实体
    Set<Map.Entry<String, Integer>>  set=map.entrySet();
    //2遍历Set集合 
    for (Map.Entry<String, Integer> entry : set) {
        String key=entry.getKey();
        Integer value=entry.getValue();
        System.out.println(key+"---"+value);
    }
}
输出:
    //小李---175
    //小红---165
    //小刘---167

3.LinkedHashMap<K,V>:

  • HashMap下的子类,存储数据采用哈希表结构(哈希表+链表),通过链表结构可以保证元素存取顺序一致,通过哈希表结构可以保证键的唯一、不重复,仍然需要让键重写hashcode方法和equals方法。
  • 底层为哈希表+链表,保证了有序。
public static void main(String[] args) {
        HashMap<String, String> hashMap=new HashMap<>();
        hashMap.put("a", "a");
        hashMap.put("c", "c");
        hashMap.put("b", "b");
        hashMap.put("d", "d");
        System.out.println(hashMap);
}
输出:
   // {a=a, b=b, c=c, d=d}

4.HashTable:

与HashMap区别:
HashTable:
  • 底层是一个哈希表,是一个线程安全得集合,是单线程,速度慢。
  • 不能存储null值 和Null健。
HashMap:
  • 底层是一个哈希表,是一个线程不安全得集合,是多线程,速度快。
  • 可以存储,null健和null值。

5.注意事项:

  • Map接口中的集合都有两个泛型的变量<K,V>。在使用时,要为两个泛型变量赋予数据类型,两个泛型变量<K,V>的数据类型可以相同,也可以不相同。

6.特点:

  1. Map集合是一个双列集合,一个元素包含两个值(key键,value值)。
  2. Map集合中的元素,key和value的数据类型可以相同也可以不同。
  3. Map集合中的元素,key是不允许重复的,value是可以重复的。
  4. Map集合中的元素,key和value是一一对应的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值