日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java中集合(一)Collection 、ListE 、ArrayListE

發(fā)布時間:2024/4/30 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中集合(一)Collection 、ListE 、ArrayListE 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、概述

  • 本質(zhì)上是一個存儲一組數(shù)據(jù)大小不定的容器 ---- 頂級 接口Collection
  • 二、集合的聲明

  • 集合的聲明 Collection<String> c; ? 表示一個存儲String類型數(shù)據(jù)的集合。
  • <E> : 泛型,在聲明一個集合時使用泛型臨時代替具體類型,由于泛型的限制,集合中只能存儲對象。
  • 三、Collection中的方法:

  • add() : 添加元素。
  • remove() : 刪除元素 。在刪除之前會首先判斷元素是否存在,若存在則刪除;若不存在,則跳過。不會報錯
  • contains() : ?判斷集合中是否包含指定元素。
  • clear() ; 清空集合
  • isEmpty() : 判斷集合是否為空。
  • size() : 獲取集合中元素的個數(shù)。
  • toArray() : 將集合轉(zhuǎn)換為數(shù)組,返回值是Object[ ] 。 返回的Object[] 不能轉(zhuǎn)換成其他類型的數(shù)組。原因:集合底層實際上是以O(shè)bject存儲內(nèi)容
  • toArray(new String[]) : 將集合轉(zhuǎn)換為指定類型的數(shù)組。底層會判斷數(shù)組的大小是否等于元素的個數(shù)。如果大于元素的個數(shù),則直接使用參數(shù)數(shù)組存儲元素;如果小于元素個數(shù)底層只會根據(jù)數(shù)組類型來創(chuàng)建一個與元素個數(shù)等大的數(shù)組存儲數(shù)據(jù)。 public static void main(String[] args) {// 表示元素類型是String類型Collection<String> c = new ArrayList<String>();// 添加元素c.add("adf");c.add("rth");c.add("lmn");c.add("jkl");// 將集合轉(zhuǎn)化為Object類型的數(shù)組// Object[] os = c.toArray();// 集合底層在存儲元素的時候?qū)嶋H上是以O(shè)bject類型存儲// Oject[] os = new Object[c.size()];// String[] os = (String[]) c.toArray();// for (String object : os) {// System.out.println(object);// }// 將集合轉(zhuǎn)化為對應(yīng)類型的數(shù)組/** 在底層會判斷傳入的數(shù)組的大小是否大于等于元素的個數(shù)* 如果大于等于了元素個數(shù),則直接使用傳入的數(shù)組來存儲元素,最后返回傳入的數(shù)組。* 如果小于元素個數(shù),底層只會根據(jù)傳入對的類型來創(chuàng)建一個和元素個數(shù)等大的數(shù)組*/String[] ss = c.toArray(new String[0]);for (String s : ss) {System.out.println(s);}// 獲取元素個數(shù)---集合中元素的個數(shù)和集合的大小是兩個概念// System.out.println(c.size());// 清空集合// c.clear();// 判斷是否一個空集合// System.out.println(c.isEmpty());// 遍歷集合// for (String s : c) {// System.out.println(s);// }// 刪除元素---在刪除這個元素之前會首先判斷這個元素是否存在。// c.remove("adg");// 判斷指定的元素是否存在// System.out.println(c.contains("jkl"));// 集合中toString做過重寫System.out.println(c);}
  • 四、List<E>?

  • List<E> 是Collection的子接口 ,所以Collection中的方法都可以用。
  • List<E> 中的元素是有序的,存在List中的元素會被自動編號。從0開始。
  • 可以有重復(fù)的元素
  • List<E>中的方法:
  • add() : 添加元素
  • add(int index ,arg) : 在指定下標(biāo)的位置添加指定元素
  • equals(List<E>) : 判斷兩個列表內(nèi)容是否一致(包括順序)。 底層實現(xiàn): 實際上是依次調(diào)用對應(yīng)位置的元素的equals方法 比較是否一致。
  • get(int index) : 獲取指定下標(biāo)位置的元素。
  • indexOf() ; 獲取指定元素在列表中第一次出現(xiàn)的位置。若果元素不在列表中,則返回-1.
  • lastIndexOf() : 獲取指定元素在列表中最后一次出現(xiàn)的位置。
  • removeIndexOf() : 移除制定下標(biāo)位置上的元素。
  • set(int index,arg) : 替換指定下標(biāo)位置的元素。
  • subList() : 獲取子列表。 public static void main(String[] args) {List<String> list = new ArrayList<String>();// 添加元素list.add("abc");list.add("def");list.add("ghi");list.add("jkl");list.add("abc");// list.add(10, "xyz");// 移除指定下標(biāo)位置上的元素// list.remove(2);// 替換指定下標(biāo)上的元素// list.set(1, "opq");// 獲取指定下標(biāo)位置上的元素// System.out.println(list.get(3));// 獲取指定元素在列表中第一次出現(xiàn)的位置// 如果元素不存在,則返回-1// System.out.println(list.indexOf("ad"));// 向列表的指定下標(biāo)上插入指定的元素// list.add(1, "mno");// 判斷兩個列表是否一致// List<String> list2 = new ArrayList<String>();// list2.add(new String("abc"));// list2.add("def");// list2.add("ghi");// list2.add("jkl");// list2.add("abc");// 在比較兩個集合是否一致的時候,實際上依次調(diào)用對應(yīng)位置上的元素的equals來比較兩個元素是否一致。// System.out.println(list.equals(list2));System.out.println(list);}
  • 五、 ArrayList<E>

  • 是List<E>的實現(xiàn)類
  • 是基于數(shù)組的
  • 初始容量為10.如果容量不夠用,則自動擴容,在上一次的基礎(chǔ)上累加一半。 ?10 -> 15 ->22 ....
  • 內(nèi)存空間連續(xù)。查詢較快,增刪較慢。
  • 練習(xí): 1. 用數(shù)組實現(xiàn)一個簡易版的ArrayList 存儲String,有add\remove\set\get\indexOf\contains\isEmpty\size\toString等方法 import java.util.Arrays;public class ListExer {// 存儲元素private String[] data;// 記錄已經(jīng)存儲的元素個數(shù)private int size = 0;public ListExer() {data = new String[10];}public ListExer(int capacity) {// 需要判斷容量是否符合事實if (capacity < 0) {capacity = 10;}data = new String[capacity];}private void grow() {if (data.length <= 1) {data = Arrays.copyOf(data, data.length + 1);return;}data = Arrays.copyOf(data, data.length + (data.length >> 1));}public void add(String s) {// 判斷是否需要擴容if (size >= data.length) {this.grow();}data[size] = s;size++;}public void add(int index, String s) {// 判斷下標(biāo)是否越界if (index > size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}// 判斷是否需要擴容if (size >= data.length) {this.grow();}// 插入元素// for (int i = size - 1; i >= index; i--) {// data[i + 1] = data[i];// }System.arraycopy(data, index, data, index + 1, size - index);data[index] = s;size++;}public void remove(String s) {// 獲取這個元素第一次出現(xiàn)的下標(biāo)int index = this.indexOf(s);// 判斷這個下標(biāo)是否存在if (index != -1) {this.remove(index);}}private void out(int index) {// 判斷下標(biāo)越界if (index >= size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}}public void remove(int index) {this.out(index);// for (int i = index; i < size - 1; i++) {// data[i] = data[i + 1];// }System.arraycopy(data, index + 1, data, index, size - index - 1);size--;}public void set(int index, String s) {this.out(index);data[index] = s;}public String get(int index) {this.out(index);return data[index];}public boolean contains(String s) {return this.indexOf(s) != -1;}public boolean isEmpty() {return size <= 0;}public int indexOf(String s) {for (int i = 0; i < size; i++) {if (s == data[i] || s != null && s.equals(data[i])) {return i;}}return -1;}public int size() {return size;}public String toString() {StringBuilder sb = new StringBuilder("[");for (int i = 0; i < size; i++) {sb.append(data[i]).append(", ");}String str = sb.toString();if (str.length() > 1) {str = str.substring(0, str.length() - 2);}return str += "]";}public static void main(String[] args) {ListExer le = new ListExer(3);le.add("a");le.add("b");le.add("c");le.add(0,"e");le.remove(0);System.out.println(le);}}


    總結(jié)

    以上是生活随笔為你收集整理的Java中集合(一)Collection 、ListE 、ArrayListE的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。