Java数据结构list集合ArrayList集合LinkedList集合Vector集合
Posted 苦海123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据结构list集合ArrayList集合LinkedList集合Vector集合相关的知识,希望对你有一定的参考价值。
数据结构:
数据存储的常用结构有:栈、队列、数组、链表、红黑树。
栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作,简单的说,采用该结构的集合,对元素的存取有着前进后出、栈的入口和出口都是栈的顶端位置的特点。
队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。简单的说采用该结构的集合有先进先出、队列的入口和出口各占一侧的特点。
数组:有序的元素序列,数组是在内存中开辟的一段连续的空间,并在此空间存放元素,就像是一排出租屋,有100个房间,这几100个房间是有顺序编号的,通过编号就可以快速的找到元素,其特点:通过索引可快速找到元素,但是增删元素慢;(指定索引位置新增元素:需要创建一个新数组,将指定新元素存储在指定索引位置,在把原数组元素根据索引,复制到新的数组对应索引的位置)
链表:linked list,由一系列结点node组成,链表中每个元素称为结点,结点可以在运行时动态生成,每个结点包括两部分,一是存储数据元素的数据域,二是存储下一个结点地址的指针域,常说的链表有单向链表和双向链表,其单向链表特点:多个结点之间通过地址进行连接,查找元素慢,增删元素快(查找某个元素需要通过连接的结点依次向后查找指定元素,增加元素只需要修改连接下个元素的地址即可
红黑树:二叉树,binary tree,是每个结点不超过2的有序树,顶上的结点称为根节点,两边的结点称为左子树和右子树,其特点:查询速度非常快。
list集合 :
import java.util.ArrayList;
import java.util.List;
// List集合继承了Collection接口,具有以下特点:存和取元素是有序的、有索引且包含了带索引的方法,允许存储重复的元素
public class ListClass
public static void main(String[] args)
// 创建一个list集合:并使用它特有的方法:
List<String> list = new ArrayList<String>();
// 1.add()向集合中添加元素:add方法传入一个参数时表示给list末尾追加元素;当有两个参数时,参数1表示要追加元素的索引位置,参数二表示追加的元素
list.add("a");
list.add("a");
list.add("bc");
System.out.println(list); // [a, a, bc]
list.add(1,"b");
System.out.println(list); // [a, b, a, bc]
// 2.remove()移除指定索引位置的元素,并返回被移除的元素,接收一个参数时即元素索引
String removedElement = list.remove(0);
System.out.println(removedElement); // a
System.out.println(list); // [b, a, bc]
// 3.set()用某个元素替换集合中指定位置的元素,并将之前的被替换的元素返回,接收两个参数时,第一个参数是要替换元素的索引位置,第二个参数表示要替换的新元素
String setElement = list.set(1, "f");
System.out.println(setElement); // a
System.out.println(list); // [b, f, bc]
// 4.get()获取指定索引位置的元素,传入一个参数表示索引
String getElement = list.get(1);
System.out.println(getElement); // f
// 扩展:遍历集合可以使用普通的for-i,通过get(i)拿到每一个元素外,还可以使用迭代器,除此之外,也可以使用加强版for(类似javascript中的for in,只需将in改为冒号,且这里变量表示某个元素,而JavaScript中变量表示索引),如:
for (String item : list)
System.out.println(item); // 分别打印每一个元素
;
ArrayList集合底层原理 :
ArrayList是List集合的一个实现类,底层是一个数组,数组的特点长度不变,当使用add等方法的时候,实际是先创建一个长度比原来多1的新数组,然后将旧数组拷贝到新数组里面去,这也不难理解ArrayList增删难的弊端,又因为数组中元素的索引是连续的,因此查询速度非常快。
LinkedList集合:
此集合是List接口的链表实现,此实现类为多线程,即非同步。特别注意此实现类不能使用多态的方式创建对象。
import java.util.LinkedList;
// LinkedList是List接口的一个实现类,底层是一个链表结构,查询慢,增删快,并且该实现类有很多特有的方法来操作元素,因为是特有的,因此不能使用多态的方式来使用这些特有的方法。
public class LinkedListClass
public static void main(String[] args)
// 因为LinkedList不能使用多态的方式创建对象,因此我们使用普通的方式创建对象并使用其特有的方法:
LinkedList<String> lt = new LinkedList<String>();
// 使用非特有方法add()向结合中添加默认元素:
lt.add("a");
lt.add("b");
lt.add("c");
System.out.println(lt); // [a, b, c]
// 下面是特有方法:
// 1.addFirst()方法向集合的最前面添加元素:
lt.addFirst("F");
System.out.println(lt); // [F, a, b, c]
// 2.push()向集合最前面添加元素,等效于addFirst(),和javascript中push方法有个天壤之别,因为js中push方法是在数组后面追加元素:
lt.push("H");
System.out.println(lt); // [H, F, a, b, c]
// 3.addLast()向集合的最后面添加元素,和add()没多大区别:
lt.addLast("V");
System.out.println(lt); // [H, F, a, b, c, V]
// 4.getFirst()获取并返回第一个元素:空集合不能使用此方法,否则会报异常
String firstItem = lt.getFirst();
System.out.println(firstItem); // H
// 5.getLast()获取并返回最后一个元素:空集合不能使用此方法,否则会报异常
String lastItem = lt.getLast();
System.out.println(lastItem); // V
// 6.removeFirst()移除并返回集合的第一个元素:
String reFiItem = lt.removeFirst();
System.out.println(reFiItem); // H
System.out.println(lt); // [F, a, b, c, V]
// 7.pop()移除返回集合第一个元素,和removeFirst()类似:
String pFiItem = lt.pop();
System.out.println(pFiItem); // F
System.out.println(lt); // [a, b, c, V]
// 8.removeLast()移除并返回集合中最后一个元素:
String reLastItem = lt.removeLast();
System.out.println(reLastItem); // V
System.out.println(lt); // [a, b, c]
// 9.clear()清空集合中的元素:
lt.clear();
System.out.println(lt); // []
Vector集合:
Vector类可以实现可增长的对象数组,单线程的。之前的旧api,被ArrayList取代了。
提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海
以上是关于Java数据结构list集合ArrayList集合LinkedList集合Vector集合的主要内容,如果未能解决你的问题,请参考以下文章
Java数据结构list集合ArrayList集合LinkedList集合Vector集合