博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 集合知识总结(三)
阅读量:4332 次
发布时间:2019-06-07

本文共 3457 字,大约阅读时间需要 11 分钟。

List集合

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

1、ArrayList

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

使用示例代码

public class ArrayListTest {    public static void main(String[] args) {        List
list = new ArrayList
(); // 添加元素 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数据1list数据:list数据2list数据:list数据3栈第一个数据:list数据1栈最后一个数据:list数据3list数据1栈中的数据[list数据2, list数据3]队列第一个数据:list数据2队列最后一个数据:list数据3list数据2队列中的数据[list数据3]

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

转载于:https://www.cnblogs.com/quina520/p/7157916.html

你可能感兴趣的文章
winform非常实用的程序退出方法!!!!!(转自博客园)
查看>>
xml解析
查看>>
centos安装vim
查看>>
linux工作调度(计划任务)
查看>>
hdu--1698 Just a Hook(线段树+区间更新+懒惰标记)
查看>>
Python学习笔记-EXCEL操作
查看>>
SQL语句、PL/SQL块和SQL*Plus命令之间的区别
查看>>
mysql 解压版 配置
查看>>
cs231n spring 2017 Python/Numpy基础
查看>>
判断对象是否遵守某个协议、方法
查看>>
python sys模块
查看>>
4_函数
查看>>
sqlconnection dispose()与close()的区别
查看>>
git 一般用法
查看>>
Json
查看>>
poj1236Network of Schools Tarjan裸题
查看>>
项目管理过程
查看>>
泛型使用
查看>>
Employment Planning[HDU1158]
查看>>
hdu2089:不要62(基础数位dp)
查看>>