Java集合总结(二)

来源:互联网 发布:linux fm驱动 编辑:程序博客网 时间:2024/05/29 10:53
  • List接口实现类

    一. ArrayList

    特征:


 1.允许添加添加null,可以存储重复数据,有序的,底层是数组结构增删慢,查询快。是非线程安全的。
        // 1.初始化        ArrayList<Book> arr = new ArrayList<Book>();        // 2. 允许添加 null,可以有重复数据,是有序的,底层是数组结构        arr.add(null);        arr.add(new Book("java",79.8));        arr.add(new Book("java",79.8));        arr.add(new Book("Android",59.8));        System.out.println(arr);

输出数据:

[null, Book [name=java, price=79.8], Book [name=java, price=79.8], Book [name=Android, price=59.8]]

2.删除数据依赖于存储对象的equals()方法

Book类没有覆写equals()方法时:

        // 1.初始化        ArrayList<Book> arr = new ArrayList<Book>();        // 2. 删除数据依赖于存储对象的equals()方法        arr.add(new Book("java",79.8));        arr.add(new Book("java",79.8));        arr.add(new Book("Android",59.8));        arr.remove(new Book("java",79.8));        System.out.println(arr);输出结果:发现remove()方法并没有生效[Book [name=java, price=79.8], Book [name=java, price=79.8], Book [name=Android, price=59.8]]

Book类覆写equals()方法后:

输出结果:最后一句remove()方法生效了[Book [name=java, price=79.8], Book [name=Android, price=59.8]]

3.常用方法示例:
        // 1.初始化        ArrayList<Book> arr = new ArrayList<Book>();        ArrayList<Book> arr1 = new ArrayList<Book>();        arr1.add(new Book("arr1->壹",1));        arr1.add(new Book("arr1->贰",2));        arr1.add(new Book("arr1->叁",3));        // 2. 添加数据        arr.add(new Book("壹",1));        arr.add(new Book("贰",2));        // 3.向指定位置添加数据        arr.add(0, new Book("插",0));        // 4.取出指定位置的数据        System.out.println(arr.get(0));        // 5.可以添加集合//      arr.addAll(arr1);        // 6. 向指定位置添加集合        arr.addAll(1, arr1);        System.out.println("------添加后------");        // 迭代器输出        Iterator<Book> iterator = arr.iterator();        while(iterator.hasNext()) {            System.out.println(iterator.next());        }        // 7.判断是否包含某对象,包含返回true        boolean contains = arr.contains(new Book("壹",1));        System.out.println(contains);        // 8.判断是否包含某集合        boolean containsAll = arr.containsAll(arr1);        System.out.println(containsAll);        // 9.返回集合大小        System.out.println(arr.size());        // 10.清空集合//      arr.clear();        System.out.println(arr.size());        // 11.判断集合是否为空        System.out.println(arr.isEmpty());

二. Vector

使用方法与ArrayList一样,不同的是,该方法是线程安全的

三. 集合的四种输出方式

        // 1.初始化        ArrayList<Book> arr = new ArrayList<Book>();        Vector<Book> vector = new Vector<Book>();        vector.add(new Book("arr1->壹",1));        vector.add(new Book("arr1->贰",2));        vector.add(new Book("arr1->叁",3));        // 2. 添加数据        arr.add(new Book("壹",1));        arr.add(new Book("贰",2));        arr.addAll(vector);        // 四种输出方式:        System.out.println("-----1.迭代器输出(Conllection都有)-----");        Iterator<Book> iterator = arr.iterator();        while(iterator.hasNext()) {            System.out.println(iterator.next());        }        System.out.println("-----2.forEach输出(底层是迭代器实现)-----");        for (Book book : arr) {            System.out.println(book);        }        System.out.println("-----3.双向输出(List接口独有)-----");        ListIterator<Book> listIterator = arr.listIterator();        while(listIterator.hasNext()) {            System.out.println(listIterator.next());        }        System.out.println("-----必须先从前遍历,否则反向遍历没有输出结果-----");        while(listIterator.hasPrevious()) {            System.out.println(listIterator.previous());        }        System.out.println("-----4.Enumeration输出(Vector独有)-----");        Enumeration<Book> elements = vector.elements();        while(elements.hasMoreElements()) {            System.out.println(elements.nextElement());        }

四. Stack

  • 描述

    Vector的子类,表示后进先出的数据结构(栈)

  • 常用方法

        // 1.初始化        Stack<Book> stack = new Stack<Book>();        // 2. 入栈        stack.push(new Book("壹",1));        stack.push(new Book("贰",2));        stack.push(new Book("叁",3));        // 3.查看栈顶元素并返回它,不移除它(空栈会报异常:EmptyStackException)        System.out.println(stack.peek());        // 4.测试堆栈是否为空        System.out.println(stack.empty());        // 5.移除栈顶元素并返回它//      System.out.println(stack.pop());        // 6.查找元素在栈内位置(返回值 -1 表示此对象不在堆栈中,栈顶元素位置为 1)        System.out.println(stack.search(new Book("叁",3)));

Set接口实现类


一.HashSet

  • 非线程安全
  • 底层由哈希表支持
  • 保证数据唯一(依靠equals()和hashCode()方法)
  • 无序的
  • 允许使用null值

二.TreeSet

  • 非线程安全
  • 底层是二叉树结构
  • 该类集存储的对象需要实现Comparable接口覆写compareTo()方法

Map接口

  • Map接口主要用来存储键值对
  • 此接口提供一个内部嵌套接口Map.Entry
  • 自定义类作为key必须覆写hashCode()和equals()方法
  • 无序的

    一. HashMap

  • 非线程安全
  • 允许键或值为null

    二. HashTable

  • 线程安全的

  • 不允许键或值为null

    使用范例:

        // 初始化        HashMap<String, Integer> map = new HashMap<>();        // 1. 添加元素        map.put("壹", 1);        map.put("贰", 2);        map.put("叁", 3);        // 2.根据键取值        System.out.println(map.get("贰"));        // 3.遍历        Iterator<Entry<String, Integer>> iterator = map.entrySet().iterator();        while(iterator.hasNext()) {            System.out.println(iterator.next());        }

三. Properties

  • 用来作为配置文件
  • 文件后缀名*.properties
  • HashTable的子类
  • 用来存储字符串

    范例:

        // 初始化        Properties p = new Properties();        // 设置属性//      p.setProperty("壹", "1");//      p.setProperty("贰", "2");//      p.setProperty("叁", "3");        // 取属性        System.out.println(p.getProperty("壹"));        // 将属性列表输出到指定的输出流        File file = new File("D:"+File.separator+"demo.properties");//      p.list(new PrintStream(new FileOutputStream(file)));        // 从输入流中读取属性列表        p.load(new FileReader(file));        System.out.println(p.getProperty("壹"));
原创粉丝点击