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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

List有关知识与ArrayList的实现

發(fā)布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 List有关知识与ArrayList的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 各種集合類之間的關系

  • 1.可以看出List接口繼承自Collection接口, Collection接口又繼承自Iterable接口,即實現了迭代器的功能(遍歷方式可用)
  • 2.ArrayList和LinkedList都繼承自AbstractList, 并且實現了List接口
    所以現在我們來看一下ArrayList的常用方法

2. ArrayList的框架圖

首先我們來看一下ArrayList的具體框架圖

  • 1 實現了RandomAccess
    RandomAccess 是一個標記接口,用于標明實現該接口的List支持快速隨機訪問,主要目的是使算法能夠在隨機和順序訪問的list中表現的更加高效。
  • 2 實現了Cloneable接口
    實現Cloneable接口表示該對象能被克隆
    克隆分為淺拷貝和深拷貝兩種,,淺拷貝是指拷貝對象時僅僅copy對象本身和對象中的基本變量,而不拷貝對象包含的引用指向的對象。深拷貝則拷貝引用中指向的對象
  • 3 實現了Serializable接口
    代表序列化,此處不多講,若有興趣可以自己查
  • 4 實現了List接口
    這樣就可以使用List接口中定義的方法

3 ArrayList的常用方法

List<Integer> al = new ArrayList<>();

1.public boolean add(E e)
在ArrayList對象中尾插一個元素進入,E e 代表泛型
2. public void add(int index, E element)
在指定位置插入一個元素,注意index必須介于[0, size)間
3.public boolean addAll(Collection<? extends E> c)
泛型寫法: 可以將包含繼承自E的對象的集合放入來添加
4.public E remove(int index)
刪除 index 位置元素
5.public boolean remove(Object o)
刪除遇到的第一個 o
6.public E get(int index)
獲取下標為index位置的元素
7.public E set(int index, E element)
將下標 index 位置元素設置為 element
8.public boolean contains(Object o)
判斷 o 是否在線性表中
9.public int indexOf(Object o)
返回第一個 o 所在下標
10public int lastIndexOf(Object o)
返回最后一個 o 的下標
11 public List<E> subList(int fromIndex, int toIndex)
截取部分List作為返回

具體使用

public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("JavaSE");list.add("JavaWeb");list.add("JavaEE");list.add("JVM");list.add("測試課程");System.out.println(list);// 獲取list中有效元素個數System.out.println(list.size());// 獲取和設置index位置上的元素,注意index必須介于[0, size)間System.out.println(list.get(1));list.set(1, "JavaWEB");System.out.println(list.get(1));// 在list的index位置插入指定元素,index及后續(xù)的元素統(tǒng)一往后搬移一個位置list.add(1, "Java數據結構");System.out.println(list);// 刪除指定元素,找到了就刪除,該元素之后的元素統(tǒng)一往前搬移一個位置list.remove("JVM");System.out.println(list);// 刪除list中index位置上的元素,注意index不要超過list中有效元素個數,否則會拋出下標越界異常list.remove(list.size()-1);System.out.println(list);// 檢測list中是否包含指定元素,包含返回true,否則返回falseif(list.contains("測試課程")){list.add("測試課程");}// 查找指定元素第一次出現的位置:indexOf從前往后找,lastIndexOf從后往前找list.add("JavaSE");System.out.println(list.indexOf("JavaSE"));System.out.println(list.lastIndexOf("JavaSE"));// 使用list中[0, 3)之間的元素構成一個新的ArrayList返回List<String> ret = list.subList(0, 3);System.out.println(ret);list.clear();System.out.println(list.size()); }

4. 自己動手實現一個ArrayList

package day20211015;import java.util.Arrays;public class MyArrayList<E> {private E[] elements;private int size;// 默認容量 10private static final int DEFAULT_CAPACITY = 10;// 構造方法public MyArrayList() {elements = (E []) new Object[DEFAULT_CAPACITY];}public MyArrayList(int capacity) {if (capacity <= 0) {capacity = DEFAULT_CAPACITY;}elements = (E [])new Object[capacity];}public int size() {return size;}public boolean add(E e) {// 考慮擴容問題//elements[size++] = e;//return true;add(size, e);return true;}public void add(int index, E e) {checkRange(index);// 考慮擴容問題ensureCapacity(size);for (int i = size-1; i >= index ; i--) {elements[i+1] = elements[i];}elements[index] = e;size++;}// ArrayList當中的擴容方式 :// 1. 先按照1.5倍的方式來計算newCapacity// 2. 如果newCapacity > MAX_ARRAY_SIZE 按照MAX_ARRAY_SIZE 來擴容 沒有超過就按照1.5倍來public void ensureCapacity(int size) {int oldCapacity = elements.length;if (size > oldCapacity) {int newCapacity = oldCapacity + (oldCapacity >> 1);elements = Arrays.copyOf(elements, newCapacity);}}public int indexOf(E e) {for (int i = 0; i < size; i++) {// 引用類型需要使用equals方法if (e.equals(elements[i])) {return i;}}return -1;}public int lastIndexOf(E e) {for (int i = size-1; i >= 0 ; i--) {if (e.equals(elements[i])) {return i;}}return -1;}@Overridepublic String toString() {return Arrays.toString(elements);}public E remove(int index) {if (index < 0 || index >= size) {throw new ArrayIndexOutOfBoundsException("remove 下標越界");}E e = elements[index];for (int i = index+1; i < size; i++) {elements[i-1] = elements[i];}elements[size-1] = null;size--;return e;}public boolean remove(E e) {int index = indexOf(e);if (-1 == index) {return false;}remove(index);return true;}private void checkRange(int index) {if (index < 0 || index > size) {throw new ArrayIndexOutOfBoundsException("index 越界");}}public E get(int index) {checkRange(index);return elements[index];}public void set(int index, E e){checkRange(index);elements[index] = e;}public void clear() {for (int i = 0; i < size; i++) {elements[i] = null;}size = 0;}public boolean contains(E e) {return -1 != indexOf(e);}public MyArrayList<E> subList(int from, int to) {if (from > to) {throw new IllegalArgumentException("from > to");}else if (from < -1 || to > size) {throw new IllegalArgumentException("from需要大于0, to需要小于size");}int newSize = to - from;MyArrayList<E> list = new MyArrayList<>(newSize);while(from < to) {list.add(elements[from]);from++;}return list;} }

總結

以上是生活随笔為你收集整理的List有关知识与ArrayList的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美日韩国产精品 | 少妇按摩一区二区三区 | av中文字幕免费观看 | 欧美大喷水吹潮合集在线观看 | 综合久久久久久久久久久 | 国产精品久久久久久久免费 | 日韩美女视频网站 | 免费看亚洲| 久久三级视频 | 波多野结衣一区二区三区四区 | 免费看一级黄色大全 | 激情综合网站 | 国产视频xxx| 欧美人喂奶吃大乳 | 97超碰在线免费观看 | 黄色1级大片 | 久久国产经典视频 | 波多野结衣网址 | 中国少妇初尝黑人巨大 | 日韩福利 | 国产夫妻性生活视频 | 国产又粗又大又爽视频 | 国产不卡视频一区二区三区 | 亚洲一区二区三区高清 | 在线免费观看你懂的 | 先锋影音av资源在线 | 中文字幕av网址 | 欧美bbbbbbbbbbbb18av | 国产精品久久一区 | www.日本色 | 亚洲精品久久久久久久久久吃药 | 国产亚洲精品美女 | 在线天堂一区 | 人操人操 | 福利一区三区 | 偷拍综合网 | 中文成人无字幕乱码精品区 | 日日夜夜拍 | 性视屏| 久久99久久99 | 欧美精品乱码视频一二专区 | 四虎啪啪| 肥婆大荫蒂欧美另类 | 欧美激情精品久久久久久蜜臀 | 亚洲人成无码www久久久 | 国内精品久久久久 | 欧美精品在线一区二区三区 | 向日葵视频在线播放 | 欧美激情久久久久久久 | 美女被娇喘流出白 | 不卡av在线免费观看 | 视频1区 | 香蕉网站视频 | 午夜成人免费视频 | 国产精品免费看 | cao国产| 操韩国美女 | 人人舔人人爽 | 日本网站在线播放 | 中文字幕日韩高清 | 麻豆私人影院 | 久热这里只有精品在线 | 伊人天天 | 99久久国| 欧美大黄| 天堂av最新网址 | 无码人妻精品一区二区三 | 亚洲2022国产成人精品无码区 | 男人添女人下部高潮视频 | 亚洲欧美日韩系列 | 草久网 | 国产精品日本 | 亚洲乱码国产乱码精品精软件 | 国产1区在线 | 国产精选视频在线观看 | 黄瓜视频在线观看 | 欧美日本高清视频 | 国产视频网站在线观看 | 久久入| 中文字幕一区二区三区人妻在线视频 | 不卡av电影在线 | 亚洲国产精品成人va在线观看 | 毛片大全在线观看 | 国产日本视频 | 中国成人毛片 | 一本到久久 | 亚洲熟妇中文字幕五十中出 | 97操操| 兔费看少妇性l交大片免费 日韩高清不卡 | 亚洲色中色| 亚洲国产精品久久久久婷婷老年 | 日本成人在线免费视频 | 噜啪啪| 热逼视频 | 一区二区影视 | 色综合久久久久久久 | 吊侵犯の奶水授乳羞羞漫画 | 国产成人精品一区二区三 | 精品一区二区三区免费看 |