collection集合--List

List

list(有序、可重复)

1.    有下标,怎么存的怎么取出来,可以存重复值;

2.    用户可以根据元素插入集合中的位置准确的找到相关元素,并通过下标对存进去的元素进行操作

 

List接口的子类:

                     ArrayList(查询用的多)

                     LinkedList(存储用的多);

             从Collection继承来的方法带有下标的就是List独有的方法

List及其子类的存储的特点:

 

堆栈

 1.先进后出(就是在它后面存进去的集合在提取时先被依次取出,待它们取出结束后再取出)
压栈的入口和出口都是栈的顶端位置; 

 

 

 

  压栈:就是存入元素;                

  弹栈:就是取出元素


队列:

    1.先进先出(存进去的元素要在它前面的元素依次取出后才能取出); 

    2.入口,出口各占一侧

 

 

 

 

 

数组类型的数组集合(ArrayList):

1.查找元素快(通过索引可以快速的找到指定位置的元素;因为有下标所以查询快)
增删元素慢:因为它的长度不可改变,增加或删除一个元素时需要先创建一个新               +++的数组,然后把增加或删除后的数组整个粘进去

 

 

 

 
  2.链表类型的数组集合(LinkedList):由数值域+指针域(存的是下一个元素的地址)组成;多个元素节点之间通过地址链接

查找元素慢(因为没有下标,得通过地址一个一个找);想查找某个元素,需要通过连接的节点,依次向后查找指定元素
2.增删速度快:因为新增或者删除一个元素直接改变元素链接的下一个地址就行;

 

 

 

 

.ArrayList与LinkedList对比:

 

。ArrayList是数组类型的集合:查询速度快,增删速度慢,所以多用ArrayList集合存储经常需要查询的数据;多用于查询业务。

LinkedList是链表类型的集合:增删速度快,查询速度慢,所以多用LinkedList进行存储业务

 

       LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,

            我们只需要了解LinkedList的特有方法即可。在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。


  Vector集合;就是早期的ArrayList(方法也一样)(和ArrayList一样都是数组类型的);枚举就是现在的迭代器(方法也一样)

 

 


List:

       增加元素

 

                  add(Object e):向集合末尾处,添加指定的元素

                 add(int index, Object e):向集合指定索引处,添加指定的元素,原有元素依次后移

    删除元素删除

                  remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素,(也可以理解为从容器里拿出来,容器里没有这个元素了,比如从果篮里拿出一个苹果,苹果我可以使用,果篮里已经没有这和苹果了)

                   remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素

   替换元素方法

                    set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素

 

   查询元素方法

                    get(int index):获取指定索引处的元素,并返回该元素

 

 

 

public static void main(String[] args) {

        List<String> list=new ArrayList<String>();//因为List是接口不能直接new对象需要借助多态,借助子类ArrayList进行new对象

//指定插入元素

        list.add("a");

        //指定位置插入元素

        list.add(0,"b");//(指定位置,下标,插入的元素)

        list.add("c");

        //遍历

        for(int i=0;i<list.size();i++)

        {//因为List具有下标,可以用老式for进行循环取值
System.
out.println(list.get(i)); } //删除指定下标的元素, String str= list.remove(2);//
            这里str是返回值,是把删除的元素返回回来了,str就是删除的那个值
因为这里的返回值是泛型,而List的泛型是String,所以这里用String str来接, .remove(下标),这里的下标填的谁就删除水 System.
out.println("删除的元素为"+str); //修改指定位置上的值 list.set(0, "你好");//(下标,修改的值) //曾强for for(String s:list) {//因为这里只是取值并不对值进行增删操作不该变集合的长度,所以可以用增强for System.out.println(s); } } }

 

LinkedList:

LinkedList是基于链表的,它是一个双向链表,每个节点维护了一个prev和next指针。同时对于这个链表,维护了first和last指针,first指向第一个元素,last指向最后一个元素。LinkedList是一个无序的链表,按照插入的先后顺序排序,不提供sort方法对内部元素排序。

Add元素:

  LinkedList提供了几个添加元素的方法:addFirst、addLast、addAll、add等,时间复杂度为O(1)。

Remove元素:

  LinkedList提供了几个移除元素的方法:removeFirst、removeLast、removeFirstOccurrence、remove等,时间复杂度为O(1)。

Get元素:

  根据给定的下标index,判断它first节点、last直接距离,如果index<size(数组元素个数)/2,就从first开始。如果大于,就从last开始。这个和我们平常思维不太一样,也许按照我们的习惯,从first开始。这也算是一点小心的优化吧。

遍历

在类集中提供了以下四种的常见输出方式:

1)Iterator:迭代输出,是使用最多的输出方式。

2)ListIterator:是Iterator的子接口,专门用于输出List中的内容。

3)foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。

4)for循环

代码示例如下:

for的形式:for(int i=0;i<arr.size();i++){...}

foreach的形式: for(int i:arr){...}

iterator的形式:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}

LinkedList:public static void main(String[] args){
LinkedList<String> arr=new LinkedList<String>();
arr,addFrist("a"); .addFrist()是把元素添加为第一个元素的意思,
但是后来调用的.addFrist()方法的元素会替代之前用的或者现有的第一个元素 arr.addFrist(
"b"); arr.addLast("c"); .addLast()是把元素添加为最后一个元素的意思,
但是后来调用的.addLast()方法的元素会替代之前或者现有的最后一个元素 arr.addFrist(
"d"); for(String s:arr){
system.out.println(s)
}//结果d,b,a,c

   //移除第一个位置的元素

   arr.removeFirst();

   System.out.println( arr.getFirst());//b

   //移除最后一个位置的元素

   arr.removeLast();

   System.out.println(arr.getLast());// c

   //清空

   arr.clear();


      while(!arr.isEmpty()){ //判断集合是否为空

     system.out.println(arr.getLast());


       }


得到最后一个元素.getLast():system.out.println(arr.getLast());
//判断集合中是否有元素:system.out.println(arr.isEmpty());
结果是false,isEmpty()是判断集合是否为空是否没有值,所以是false如果没有值就返回true

 

posted @ 2019-08-31 09:16  腊月出去玩  阅读(169)  评论(0编辑  收藏  举报