Java(集合④)

2022-05-12 20:25:32 浏览数 (1)

可变参数:

是1.5之后出现的新特性。

前提条件:

当方法的参数列表数据类型已经确定,但是参数个数不确定,就可以使用可变参数;

格式:

代码语言:javascript复制
修饰符 返回值类型 方法名(数据类型...变量名){}

代码:

代码语言:javascript复制
public static void sum(int...a){//可变参数}

注意:可变参数可传零-多个;

可变参数的原理:

可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来储存这些参数;

注意事项:

1、一个方法的参数列表,只能有一个可变参数;

2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾;

实例代码:

代码语言:javascript复制
public static void sum(int b,int...a){
//可变参数必须放在参数列表的末尾,其他参数写在前面
}

Collections集合工具类

用来对集合进行操作的;

常用方法:

void shuffle(List<?> list):打乱集合顺序;

代码语言:javascript复制
ArrayList<String> pai=new ArrayList<>();//创建集合 
Collections.shuffle(pai);//打乱集合元素顺序

boolean addAll(Collection<? super T> c, T... elements):将所有指定元素添加到指定 collection 中;

代码语言:javascript复制
ArrayList<String> pai=new ArrayList<>();//创建集合
Collections.addAll(pai,"a","b","cd");//将a,b,cd添加到集合pai中

void sort(List<T> list, Comparator<? super T> c):根据指定比较器产生的顺序对指定列表进行排序(默认是升序排序;

Person类:

代码语言:javascript复制
public class Person implements Comparable<Person>{
    private String name;
    private int age;
/*
*此处隐藏构造方法以及get set等方法
*/
    @Override
    public int compareTo(Person o) {
        return this.age-o.age;
        //this-参数为升序
        //参数-this为降序 
    }
}

Test类:

代码语言:javascript复制
public class Test {
    public static void main(String[] args) {
        ArrayList<Person> arrayList=new ArrayList<>();
        arrayList.add(new Person("张三",18));
        arrayList.add(new Person("张四",21));
        arrayList.add(new Person("张五",20));
        System.out.println(arrayList);//未进行排序的 
        Collections.sort(arrayList);//进行排序 
        System.out.println(arrayList);//进行排序后 
    }
}

注意:

1、被排序的集合中存储的元素,必须实现Comparable接口,重写接口中的方法compareTo定义排序的规则;

2、 this-参数:升序

参数-this:降序

Map集合

Map集合特点:

  1. Map集合是一个双列集合,一个元素包含两个值(一个Key,一个Value);
  2. Map集合中的元素,Key和Value的数据类型可以相同,也可以不同;
  3. Map集合中的元素,key是不允许重复的,Value是可以重复的;
  4. Map集合中的元素。Key和Value是一一对应的;

Java.util.HashMap<K,V> Implements Map<K,V>接口

HashMap集合的特点:

1、HashMap集合的底层是哈希表,查询速度特别快;

JDK1.8之前:数组 单项链表;

JDK1.8之后:数组 单项链表/红黑树;

2、HashMap是一个无序集合,存储和取出的元素顺序有可能不一致;

Map接口中的方法:

①V put(K key, V value):将指定的值与此映射中的指定键关联(添加元素)

代码语言:javascript复制
Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合

注意:Key重复,会使用新的value替换map中重复的value,返回被替换的值;

②V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除(删除对应的Key值元素)

代码语言:javascript复制
Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.remove("小强");//删除Key值为"小强"的元素

③V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null(获取参数Key对应的Value值)

代码语言:javascript复制
Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.get("小强");//获取到Value值 18

④boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true(查询对应key值)

代码语言:javascript复制
Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.containsKey("小强");//查询Key值为小强的元素,返回true

HashMap集合的遍历:

第一种遍历:

Set<K> keySet():返回此映射中包含的键的 Set 视图

实现步骤:

  1. 使用Map集合中的方法KeySet(),把Map集合中所有的Key取出来,存储到一个Set集合中;
  2. 遍历Set集合,获取Map集合中的每一个Key;
  3. 通过Map集合中的get(Key)方法,用Key找到Value;
代码语言:javascript复制
Map<String,Integer> map=new HashMap<>();
map.put("小东",180);
map.put("科比",190);
map.put("姚明",160);
//1、使用Map集合中的KeySet()方法,把Map集合中所有的Key取出来,存储到一个Set集合中
Set<String> strings = map.keySet();
//2、遍历Set集合,获取Map集合中的每一个Key
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()){
    String next = iterator.next();//Key值
    //3、通过Map集合中的get(Key)方法,用Key找到Value 
    Integer integer = map.get(next);//Value值
    System.out.println(next "..." integer);
}

第二种遍历:

Set<Map.Entry<K,V>> entrySet():返回此映射中包含的映射关系的 Set 视图

实现步骤:

  1. 使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中;
  2. 遍历Set集合,获取每一个Entry对象;
  3. 使用Entry对象中的方法getKey()和getValue获取键与值;
代码语言:javascript复制
//第二种方式
//使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
Set<Map.Entry<String, Integer>> entries = map.entrySet();
//遍历Set集合,获取每一个Entry对象
Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
while (iterator.hasNext()){
    //使用Entry对象中的方法getKey()和getValue获取键与值
    Map.Entry<String, Integer> next = iterator.next();
    String key = next.getKey();
    Integer value = next.getValue();
    System.out.println(key "..." value);
}
for (Map.Entry<String, Integer> x:entries){
    //使用Entry对象中的方法getKey()和getValue获取键与值
     System.out.println(x.getKey() "..." x.getValue());
}

0 人点赞