zoukankan      html  css  js  c++  java
  • Java 集合知识总结(三)

    List集合

    Llist集合元素有序可重复,并且可以根据索引查找元素,List判断两个元素是否相等是通过对象的equals()方法是否相等

    1、ArrayList

    ArrayList类内部封装了一个动态的、允许在分配的Object[]数组,如果添加元素超过数组长度时,initialCapacity会自动增加,默认长度为10,需要添加大量元素时,可以通过ensureCapacity(int initialCapacity)方法一次性增加长度,减少重分配得次数,提高性能。

    使用示例代码

    public class ArrayListTest {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            // 添加元素
            list.add("java se");
            list.add("java ee");
            list.add("java me");
            list.add("c#");
            // 获取元素
            list.get(0);
            // 删除元素
            list.remove(1);
            list.remove("c#");
            // 重新咋删除的位置插入元素
            list.add(1, "c++");
            // 遍历集合
            for (String str : list) {
                System.out.println(str);
            }
        }
    }

    2、Queue集合

    Queue用于模拟队列这种数据结构,队列数据“先进先出”,队列的头部保存在队列中时间最长的元素,队列的尾部保存在队列中时间最短的元素;新元素插入(offer)到队列的尾部,访问元素(poll)会返回队列头部的元素,队列不允许随机访问队列中的元素。

    1 ) ArrayDeque类

    双端队列,允许从两端操作队列的元素。

    模拟栈数据结构(后进先出),使用push()方法插入数据,peek()方法用于获取第一个元素,pop()用于获取第一个元素并从栈中取出

    代码示例:

    public class ArrayDequeTest {
        public static void main(String[] args) {
            // 模拟栈数据  后进先出
            ArrayDeque deque = new ArrayDeque();
            // 插入数据
            deque.push("java");
           deque.push("xml");
           deque.push("html");
            
            // 获取第一个数据不删除
            System.out.println(deque.peek());
           System.out.println("栈中的数据:" + deque.toString());
            //从栈中取出第一个数据并删除
            System.out.println(deque.pop());
           System.out.println("栈中的数据:" + deque.toString());
        }
    }

    结果是:

    html
    栈中的数据:[java, xml, html]
    html
    栈中的数据:[java,xml]

    模拟队列数据结构(先进先出),使用offer()方法插入数据,peek()方法用于获取队列头部元素,poll()获取头部元素并从队列中删除

    代码示例:

    public class ArrayDequeTest {
        public static void main(String[] args) {
            // 模拟队列数据 先进先出
            ArrayDeque deque = new ArrayDeque();
            // 插入数据
            deque.offer("java");
           deque.offer("xml");
           deque.offer("html");
    
            // 获取第一个数据不删除
            System.out.println(deque.peek());
           System.out.println("队列中的数据:" + deque.toString());
            // 从队列中取出第一个数据并删除
            System.out.println(deque.poll());
           System.out.println("队列中的数据:" + deque.toString());
        }
    }

    结果是:

    java
    栈中的数据:[java, xml, html]
    java
    栈中的数据:[xml, html]

    2)LinkedList类

    List接口的实现类,也实现了Deque接口,所以既可以通过索引随机访问元素,也可以当做双端队列和栈使用。

    public class LinkedListTest {
        public static void main(String[] args) {
            LinkedList list = new LinkedList();
    
            // list添加数据
            list.add("list数据1");
            list.add("list数据2");
            list.add("list数据3");
            // 遍历数据
            for (int i = 0; i < list.size(); i++) {
                System.out.println("list数据:" + list.get(i));
            }
    
            // 访问栈数据
            System.out.println("栈第一个数据:" + list.peekFirst());
            System.out.println("栈最后一个数据:" + list.peekLast());
            // 取出栈数据
            System.out.println(list.pop());
            // 查询栈中数据
            System.out.println("栈中的数据" + list.toString());
    
            // 访问队列数据
            System.out.println("队列第一个数据:" + list.peekFirst());
            System.out.println("队列最后一个数据:" + list.peekLast());
            // 取出队列第一个数据
            System.out.println(list.poll());
            // 查询队列中数据
            System.out.println("队列中的数据" + list.toString());
        }
    }

    结果是

    list数据:list数据1
    list数据:list数据2
    list数据:list数据3
    栈第一个数据:list数据1
    栈最后一个数据:list数据3
    list数据1
    栈中的数据[list数据2, list数据3]
    队列第一个数据:list数据2
    队列最后一个数据:list数据3
    list数据2
    队列中的数据[list数据3]

    总结:遍历list集合时,对于ArrayList集合应使用随机访问方法(get)来遍历;LinkedList应使用迭代器(Iterator)来遍历,如果需要执行插入、删除操作来改变包含大量数据的集合,推荐使用LinkedList;多线程操作集合数据时,应使用Collections将集合包装成线程安全的集合

  • 相关阅读:
    B/S架构大文件上传问题
    大文件上传解决方案-支持断点续传的文件上传插件(转)
    前端大文件分片上传
    B/S大文件分片上传
    Web大文件分片上传
    .NET大文件分片上传
    ASP.NET大文件分片上传
    leetCode(37):Implement Queue using Stacks
    poj 3928 Ping pong(树状数组)
    从零開始学Swift之Hello World进化版
  • 原文地址:https://www.cnblogs.com/quina520/p/7157916.html
Copyright © 2011-2022 走看看