Java 列表

2018-02-20 02:43 更新

Java集合教程 - Java列表


列表是對(duì)象的有序集合,在 List 界面中定義。 List  接口表示集合框架中的列表。

列表可以具有重復(fù)的元素。并且我們可以在列表中存儲(chǔ)多個(gè)空值。

List 接口繼承了集合接口和它添加了一些方法來支持使用索引訪問其元素。

我們可以在 List 或的末尾添加一個(gè)元素在由整數(shù)索引標(biāo)識(shí)的任何位置。

列表中元素的索引是從零開始的。

我們可以使用以下方法使用索引添加,獲取,刪除和替換其元素。

its add(int index, E  element), 
addAll(int  index, Collection<? extends E> c), 
get(int index), 
remove(int index) 
set(int  index, E  element) 

我們可以搜索元素的位置 List 使用indexOf(Object o)或 lastIndexOf(Object o)方法。

indexOf()方法搜索指定的對(duì)象從開始,它返回索引的對(duì)象的第一次出現(xiàn)。

lastIndexOf()方法從列表的末尾搜索元素。兩個(gè)方法都返回-1如果 List 不包含指定的對(duì)象。

subList(int fromIndex,int toIndex)返回一個(gè)子列表的原始列表從索引fromIndex(包括)到索引toIndex(獨(dú)占)。

ListIterator List 接口可以返回在向前和向后方向上遍歷其元素。

List APIs

ArrayList和LinkedList

以下是實(shí)現(xiàn) List 接口的兩個(gè)類:

  • ArrayList
  • LinkedList

ArrayList由數(shù)組備份。鏈接列表由鏈接列表備份。

如果我們頻繁地訪問列表的元素,那么 ArrayList 會(huì)表現(xiàn)得更好。訪問ArrayList中的元素更快,因?yàn)樗菙?shù)組后端。

ArrayList 添加或刪除元素更慢除非從頭到尾,因?yàn)?code> ArrayList 必須執(zhí)行數(shù)組副本內(nèi)部保持元素的順序。

LinkedList 的性能優(yōu)于 ArrayList 用于添加和從列表中間刪除元素。但是,訪問列表中的元素更慢,除非在列表的頭部。

import java.util.ArrayList;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("Java");
    list.add("Oracle");
    list.add("CSS");
    list.add("XML");

    System.out.println("List: " + list);

    int count = list.size();
    System.out.println("Size of  List: " + count);

    // Print each element with its index
    for (int i = 0; i < count; i++) {
      String element = list.get(i);
      System.out.println("Index=" + i + ", Element=" + element);
    }

    List<String> subList = list.subList(1, 3);
    System.out.println(subList);

    // Remove "CSS" from the list 
    list.remove("CSS"); // Same as list.remove(2);
     System.out.println(list);
  }
}

上面的代碼生成以下結(jié)果。

ArrayList APIs

LinkedList APIs


ListIterator

我們可以使用 ListIterator 接口以遍歷列表。

ListIterator 接口繼承了 Iterator 接口并且它增加了幾個(gè)方法來從當(dāng)前位置向后訪問列表中的元素。

以下代碼顯示了如何從列表中獲取列表迭代器:

ListIterator<String> fullIterator = list.listIterator();

為了得到在正向從索引5開始的列表迭代器,使用以下代碼。

ListIterator<String> partialIterator = list.listIterator(5);

以下代碼顯示如何使用 ListIterator

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Main {
  public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("Oracle");
    list.add("SQL");
    list.add("CSS");
    list.add("XML");
    System.out.println("List: " + list);
    // Get the list iterator
    ListIterator<String> iterator = list.listIterator();
    while (iterator.hasNext()) {
      int index = iterator.nextIndex();
      String element = iterator.next();
      System.out.println("Index=" + index + ", Element=" + element);
    }
    // Reuse the iterator to iterate from the end to the beginning
    while (iterator.hasPrevious()) {
      int index = iterator.previousIndex();
      String element = iterator.previous();
      System.out.println("Index=" + index + ",  Element=" + element);
    }
  }
}

上面的代碼生成以下結(jié)果。

ListIterator 可以向前看或回頭一個(gè)列表。

next()方法向前移動(dòng)一個(gè)索引,而 previous()方法向后移動(dòng)一個(gè)索引。

如果使用 next()方法,后跟 previous()方法,迭代器返回到相同的位置。

ListIterator APIs

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)