集合

作者: 想吃热干面了 | 来源:发表于2019-03-04 14:50 被阅读0次

    在Java中, 用数组保存数据时会有一些问题?比如,数组的长度无法改变,在定义时就设定好了,这时候我们就要用到集合:

    集合是什么:Java集合类存放于 java.util 包中,是一个用来存放对象的容器。存放的引用数据类型的引用,即内存地址

    注意:1、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。
         2、集合存放的是多个对象的引用,对象本身还是放在堆内存中。
         3、集合可以存放不同类型,不限数量的数据类型。
    

    在Java中,我们常用的集合有三种:

    1.List<E>集合
    2.Set<E>集合
    3Map<K,V>集合
    其中List和Set都继承了Collection接口,Map没有继承和实现其余接口或者类
    collections类中封装了一些集合用到的方法
    

    List<E>集合:是一个有序可重复的集合,根据存储的顺序指定索引(从0开始)

    继承了collection<E>,Iterable<E>接口
    实现类:ArrayList(速度快,线程不安全);vector(速度慢,线程安全)   
    添加元素的方法:list.add()
    获取元素的方法:list.get()
    移除元素的方法:list.remove()
    获取集合长度:list.size()
    可以存放null;但无意义
    Person p1 = new Person();
        p1.setId(100);
        p1.setName("jazz");
        p1.setAge(10);
    Person p2 = new Person();
        p2.setId(200);
        p2.setName("jazz2");
        p2.setAge(20);
    List<Person> list = new ArrayList<>();
        list.add(1);
        list.add("tom");
        list.add(3.14);
        list.add(p1);
        list.add(p2);
    
    List<E>集合的遍历:有三种方法
    1.简单的for循环
    for(int i = 0;i<list.size();i++){
        Person person = list.get(i);
        System.out.println(person.getId()+"---"+person.getName());
     }
    2.foreach循环
    for (Person person : list) {
        System.out.println(person.getId()+"---"+person.getName());
    }
     3.使用Iterable<E>接口的iterator()方法,迭代器(也是一种设计模式)
     Iterator<Person> it = list.iterator();
        while (it.hasNext()) {
        //需要獲取對象
        Person pp = it.next();
        System.out.println(pp.getId()+"---"+pp.getName());
    }
    

    Set<E>集合:一个不包含重复元素集合

    继承了collection<E>,Iterable<E>接口
    常用实现类:
    HashSet:无序;不可重复。线程不安全,存取速度快,底层实现是一个HashMap(保存数据),实现Set接口
    TreeSet:有序;不可重复,底层使用 红黑树算法,擅长于范围查询
    
    添加操作同list集合,只能用迭代器方法来进行遍历,因为无序
    public class SetDemo {
    public static void main(String[] args) {
            Person p1 = new Person();
            p1.setId(100);
            p1.setName("jazz");
            p1.setAge(10);
            Person p2 = new Person();
            p2.setId(200);
            p2.setName("jazz2");
            p2.setAge(20);
            Person p3 = new Person();
            p3.setId(300);
            p3.setName("jazz3");
            p3.setAge(30);  
        //1.创建了集合Set
        Set<Person> set = new HashSet<>();
        //2.向Set集合中添加元素
        set.add(p1);
        set.add(p2);
        set.add(p3);
        //3.如何从Set集合中获取元素
        Iterator<Person> iterator = set.iterator();
        while(iterator.hasNext()) {
            Person p = iterator.next();
            System.out.println(p.getId()+"---"+p.getName());
        }
        Set<Integer> set = new TreeSet<>();//有序的集合
        set.add(23);
        set.add(13);
        set.add(1);
        set.add(2);
        set.add(7);
        set.add(5);
        Iterator<Integer> iterator = set.iterator();
        while(iterator.hasNext()) {
            Integer p = iterator.next();
            System.out.println(p);
        }
        
    }
    }
    

    Map<K,V>集合:根据键-值对来保存数据,可以快速的根据键取出想要的值。将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射到一个值(键唯一)

    在Map集合中,使用put("key","value")来保存数据
    获取数据用get(key)方法
    常用实现类HashMap、Hashtable、TreeMap

    HashMap:允许空值做键,速度快,线程不安全
    Hashtable:不允许空值做键,速度慢、线程安全

    遍历:自己没有遍历的方法,提供了一个方法,将map集合转换为set集合,再进行迭代
    public class MapDemo {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setId(100);
        p1.setName("jazz");
        p1.setAge(10);
        
        Person p2 = new Person();
        p2.setId(200);
        p2.setName("jazz2");
        p2.setAge(20);
        
        Person p3 = new Person();
        p3.setId(300);
        p3.setName("jazz3");
        p3.setAge(30);
        
        //1.创建Map集合
        Map<String, Person> maps = new HashMap<>();
        //2.向Map集合中添加对象
        maps.put("p1", p1);
        maps.put("p2", p2);
        maps.put("p3", p3);
        
        //3.从集合中获取到某一个对象
        Person person = maps.get("p2");
        System.out.println(person.getName());
        
        System.out.println("-------------------------------------------------------");
        //4.如何对Map进行遍历操作Entry<String, Person>相当于Map集合
        Set<Entry<String, Person>> set = maps.entrySet();
        Iterator<Entry<String, Person>> iterator = set.iterator();
        while(iterator.hasNext()) {
            //从迭代器中获取Map集合
            Entry<String, Person>  entry = iterator.next();
            String key = entry.getKey();
            Person person2 = entry.getValue();
            System.out.println(key+"-----"+person2.getName());
        }
        System.out.println("-------------------------------------------------------");
    }
    }
    

    三种集合对比来说,list和map用的比较多,其中map能更快速的取到想要的指定对象。list和set有一个父接口,list可以存放重复数据,有序的集合;set不可以存放重复数据,无序的集合(没有索引)。map键值对来排序,也是无序的。

    泛型<E>:泛型是一種未知的類型,與方法的傳參是一樣的 作用:可以約束集合中元素的類型

    相关文章

      网友评论

          本文标题:集合

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