美文网首页
Java基础(7)——集合和Map

Java基础(7)——集合和Map

作者: 让时间走12138 | 来源:发表于2020-04-07 16:38 被阅读0次

    本节内容

    1.ArrayList基本使用

    2.Map使用

    3.联系人项目任务布置

    一、ArrayList基本使用

    (1).Collection 是集合类的一个接口,定义了集合共有的方法
    (2).Collection接口以下有两个子接口:List和Set。①List:列表(数组),允许有重复的对象,并且是有序的。②Set:集合(和数学概念里的集合意义相同),没有顺序且不能包含重复对象 注:List与Set的使用方法相同,它们唯一的不同就是前面介绍的
    (3).List接口又有两个子类:ArrayList类和LinkedList类。①ArrayList:实现类 ,内部是线性表结构,当频繁使用get时使用 ②LinkedList类:实现类,内部使用链表结构,当频繁出现add和remove时使用
    • 1.创建一个List类,其实ArrayList和LinkedList的调用方法相同,以下以ArrayList类为例。其中<>里面是数组类型,因为List是接口,不能被实例化,所以创建的是子类的对象,这就是多态。
           List<Person> people =new ArrayList();
            ArrayList<Person> people1=new ArrayList<>();
    
    • 2.添加对象时,因为只添加一次,所以没有必要重新创建一个Person类对象,再将其传给数组,直接使用匿名对象即可。调用add函数添加对象时,如果调用的是含有一个参数的add函数,那么就是默认在数组末尾添加对象。
     //数组的创建
            //集合对象里面只能保存同一种数据类型
            List<Person> people =new ArrayList();
            ArrayList<Person> people1=new ArrayList<>();
    
            //添加对象,在数组末尾添加
            people1.add(new Person(35,98,"Jack"));
            people1.add(new Person(33,78,"Rose"));
            people1.add(new Person(23,88,"Lucy"));
    
    • 3.插入数据,同样调用add函数,不过是调用有两个参数的add函数,前面的表示插入的位置,后面的表示要插入的对象。也可以调用addAll函数插入多个数据
           //在某个位置插入数据
            people1.add(0,new Person(23,58,"Merry"));
    
    • 5.获取一个对象,直接用get方法访问
            //获取一个对象
            Person person= people1.get(0);
    
    • 4.遍历一个数组,有三种方法
    • ①使用for循环遍历,可以调用.size()函数获取数组的大小
         //1.使用for循环遍历
            for (int i=0;i<people1.size();i++){
                Person p=people1.get(i);
                System.out.println(p);
            }
    
    • ②使用增强for循环遍历
        //2.使用增强for循环遍历
            for(Person p:people1){
                System.out.println(p);
            }
    
    • ③使用Iterator遍历器来遍历
           Iterator<Person> interator= people1.iterator();
             //使用hasNext() 判断是否还有下一个
            //next()获取下一个对象
            while (interator.hasNext()){
                Person p=interator.next();
                System.out.println(p);
            }
    
    • 5.删除某个对象,调用remove方法,如果是删除i对应的对象,那么直接调用参数类型为int的remove函数。如果删除的是某个对象,那么就调用参数类型为Object的remove函数
               //删除i对应的对象
                people1.remove(i);
                //删除某个对象
                people1.remove(p);
    
    如果是在for循环里面通过i来删除数组,那么删除以后i++,然后数组对象又会重新编号(从0往后),所以可能删除的不完整,那么用for循环来删除数组就有点不靠谱
    • 6.(iterator)来删除数组,就可以把里面的元素全部删除
         while (interator.hasNext()){
                interator.remove();
            }
    
    • 7.按照一定的条件删除:①.创建predicate的子类对象,首先写一个Mypredicate类,在里面写上我们删除的条件,可以按照这个条件来删除
     static class Mypredicate implements Predicate<Person>{
            public boolean test(Person person){
                if(person.age>30){
                    return true;
                }
                return false;
            }
        }
    
    然后在主类里面定义一个Mypredicate类,再用数组调用removeIf方法
         //数据的删除
          Mypredicate mypredicate=new Mypredicate();
            people1.removeIf(mypredicate);
    
    ②.使用匿名内部类,这样就不用再另外创建一个类了
    people1.removeIf(new java.util.function.Predicate<Person>() {
               @Override
               public boolean test(Person person) {
                   if(person.age>30){
                       //如果返回值为true,那么这个对象将会被删除
                       return true;
                   }
                   return false;
               }
           });
    
    • 8.数组的排序:①、自己定义的类必须实现Comparable接口和CompareTo方法,以下代码我只添加了CompareTo方法,其他的属性没有写出来,这是升序排序,如果想要实现降序排序,只需将1和-1的位置互换即可
    class Person implements Comparable<Person> {
    @Override
        public int compareTo(Person person) {
            if(person.age>this.age){
                return 1;
            }else if(person.age==this.age){
                return 0;
            }
            return -1;
        }
    }
    
    然后在子类里面通过Collection调用sort方法
    Collections.sort(people1);
    
    数组的排序:②、使用匿名内部类,直接用数组调用sort方法即可,比较的内容可以自己决定
     people1.sort(new Comparator<Person>() {
                @Override
                public int compare(Person person, Person t1) {
                    if(person.score>t1.score){
                        return 1;
                    }else if(person.score==t1.score){
                    return 0;
                }
                    return -1;}
            });
    
    • 9.判断数组里面是否包含某一个元素,调用contains函数
          //判断数组里面是否包含某一个元素
            if(people1.contains(person)){
                System.out.println("有这个人");
            }else{
                System.out.println("没有这个人");
            }
    
    • 10.获取某个对象的索引值,直接调用indexOf函数方法
           //获取某个对象的索引值
            System.out.println(people1.indexOf(person));
    
    • 11.重新改变某个值,调用set函数,括号右边是替换的对象
        //重新改变某个值
            people1.set(0,person);
    
    • 12.清空数组,调用clear函数
           //清空
            people1.clear();
    

    二、Map使用

    1.Map(映射):也叫dictionary,里面包含键(key)和值(value),在里面键和值总在一起,称为键值对,(【key:value,key:value】),没有顺序
    2.Map也是一个接口,Map以下还有一些子接口,常用的有三个:①HashMap:管理键值对 ②ConcurrentMap:线程安全 ③LinkedHashMap
    注:它们三个的用法基本相同,所以以HashMap为例
    3.HashMap的几种用法:先创建一个Map对象
    Map<String,Person> map= new HashMap<>();
    
    以下按顺序分别为(1)添加一个键值对(2)获取键值对的个数(3)判断是否包含某个key(4)判断是否包含某个值(5)获取某个key对应的值(6)删除键值对(7)替换键值对(8)清空键值对
      //添加一个键值对
            map.put("Jack",new Person(20,98,"Jack"));
           map.put("Rose",new Person(23,99,"Rose"));
           //获取键值对的个数
            System.out.println(map.size());
          //是否包含某个key
            System.out.println(map.containsKey("jack"));
            //是否包含某个值
            System.out.println(map.containsValue(people));
           //获取某个key对应的值
            Person p1=   map.get("jack");
            //删除键值对
            map.remove("jack");
            //替换
            map.replace("jack",new Person(33,55,"张三"));
           //清空
            map.clear();
    
    (9)Map遍历,在Map里面还封装了Entry类,在这个类里面又有getKey()和getValue()方法,可以将这些键值对输出来
    //map遍历
            Set<Map.Entry<String,Person>> entries =map.entrySet();
            for(Map.Entry<String ,Person> entry:entries){
                System.out.println("Key:"+entry.getKey()+" "+"value"+entry.getValue());
            }
    
    这些内容和昨天的ArrayList里面的很多方法都类似,可以自行多多理解体会。
    OK,以上就是我们今天的全部内容,再见!

    相关文章

      网友评论

          本文标题:Java基础(7)——集合和Map

          本文链接:https://www.haomeiwen.com/subject/iuqbphtx.html