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将集合包装成线程安全的集合

posted on 2017-07-12 22:05  若离  阅读(152)  评论(0编辑  收藏  举报

导航