二饭 发表于 2020-4-12 10:48

Java(集合④)

本帖最后由 二饭 于 2020-4-12 10:51 编辑

可变参数:是1.5之后出现的新特性。
前提条件:    当方法的参数列表数据类型已经确定,但是参数个数不确定,就可以使用可变参数;
格式:
修饰符 返回值类型 方法名(数据类型...变量名){}

代码:
public static void sum(int...a){//可变参数}
注意:可变参数可传零-多个;
可变参数的原理:   
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来储存这些参数;


注意事项:
1、一个方法的参数列表,只能有一个可变参数;
2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾;
实例代码:
public static void sum(int b,int...a){
//可变参数必须放在参数列表的末尾,其他参数写在前面
}



Collections集合工具类
用来对集合进行操作的;

常用方法:

void shuffle(List<?> list):打乱集合顺序;
ArrayList<String> pai=new ArrayList<>();//创建集合
Collections.shuffle(pai);//打乱集合元素顺序

boolean addAll(Collection<? super T> c, T... elements):将所有指定元素添加到指定 collection 中;
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类:
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类:
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):将指定的值与此映射中的指定键关联(添加元素)
Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合

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

②V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除(删除对应的Key值元素)
Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.remove("小强");//删除Key值为"小强"的元素


③V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null(获取参数Key对应的Value值)
Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.get("小强");//获取到Value值 18

④boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true(查询对应key值)
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;
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获取键与值;


//第二种方式
//使用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());
}


这次格式好了不少 我再努力吧{:1_924:}

..

qinyuanjun1993 发表于 2020-4-12 11:06

虽然看不懂 但是前排支持一下原创

wangyoo 发表于 2020-4-12 11:09

支持原创

isispp 发表于 2020-4-12 11:33

大佬大佬{:1_921:}

vethenc 发表于 2020-4-12 11:54

感谢分享
页: [1]
查看完整版本: Java(集合④)