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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现

發布時間:2025/4/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

泛型Generics

一般通過“容器”來容納和管理數據。程序中的“容器”就是用來容納和管理數據。

數組就是一種容器,可以在其中放置對象基本類型數據

數組的優勢:是一種簡單的線性序列,可以快速地訪問數組元素,效率高。如果從效率類型檢查的角度講,數組是最好的。

數組的劣勢不靈活容量需要事先定義好,不能隨著需求的變化而擴容。比如:在一個用戶管理系統中,要把今天注冊的所有用戶取出來,那么這樣的用戶有多少個?在寫程序時是無法確定的。因此,在這里就不能使用數組。

容器,也叫集合(Collection)

泛型:可以幫助我們建立類型安全的集合在使用了泛型的集合中,遍歷時不必進行強制類型轉換。JDK提供了支持泛型的編譯器,將運行時的類型檢查提前到了編譯時執行,提高了代碼可讀性和安全性。

泛型的本質就是“數據類型的參數化”。可以把“泛型”理解為數據類型的一個占位符(形式參數),即告訴編譯器,在調用泛型時必須傳入實際類型。

未使用泛型時:

package cn.dym11; //測試泛型 public class TestGeneric {public static void main(String[] args) {MyCollection mc=new MyCollection();mc.set("代止兮", 0);mc.set(8888, 1);Integer a=(Integer) mc.get(1);String b=(String) mc.get(0);} } class MyCollection {Object [] objs=new Object[5];public void set(Object obj,int index) {objs[index]=obj;}public Object get(int index) {return objs[index];} }

使用泛型:

package cn.dym11; //測試泛型 public class TestGeneric {public static void main(String[] args) {MyCollection<String> mc=new MyCollection<String>();mc.set("代止兮", 0);String b=mc.get(0);} } class MyCollection <E> {Object [] objs=new Object[5];public void set(E e,int index) {objs[index]=e;}public E get(int index) {return (E) objs[index];} }

自定義泛型、容器中使用泛型

類的聲明處增加泛型列表,如:<T,E,V>

public class Test {public static void main(String[] args) {// 以下代碼中List、Set、Map、Iterator都是與容器相關的接口;List<String> list = new ArrayList<String>();Set<Man> mans = new HashSet<Man>();Map<Integer, Man> maps = new HashMap<Integer, Man>();Iterator<Man> iterator = mans.iterator();} }

Collection、List、Set、Map、Iterator接口都定義了泛型。


Collection接口

Collection 表示一組對象,它是集中、收集的意思。Collection接口的兩個子接口是ListSet接口。

注:由于List、Set是Collection的子接口,意味著所有List、Set的實現類都有上面的方法。

package cn.dym11;import java.util.ArrayList; import java.util.Collection;//測試Collection接口中的方法 public class TestList {public static void main(String[] args) {Collection<String> c=new ArrayList<>();System.out.println(c.size());System.out.println(c.isEmpty());c.add("代止兮");c.add("蒼凌");System.out.println(c);System.out.println(c.size());System.out.println(c.contains("蒼凌"));Object[] objs=c.toArray();System.out.println(objs);c.remove("蒼凌");System.out.println(c);c.clear();System.out.println(c.size());}}

package cn.dym11;import java.util.ArrayList; import java.util.Collection; import java.util.List;//測試Collection接口中的方法 public class TestList {public static void main(String[] args) {test02();}public static void test02() {List<String> list01=new ArrayList <>();list01.add("aa");list01.add("bb");list01.add("cc");List<String> list02=new ArrayList <>();list02.add("aa");list02.add("dd");list02.add("ee");System.out.println("list01:"+list01); //list01:[aa, bb, cc]// list01.addAll(list02);// System.out.println("list01:"+list01); //list01:[aa, bb, cc, aa, dd, ee]// list01.removeAll(list02);// System.out.println("list01:"+list01); //list01:[bb, cc]list01.retainAll(list02);System.out.println("list01:"+list01); // list01:[aa]System.out.println(list01.containsAll(list02));} }


List特點和常用方法

List是有序、可重復的容器?

有序:List中每個元素都有索引標記。

可重復:List允許加入重復的元素。更確切地講,List通常允許滿足 e1.equals(e2) 的元素重復加入容器。

List接口常用的實現類有3個:ArrayListLinkedListVector

List中操作索引的常用方法

package cn.dym11;import java.util.ArrayList; import java.util.List;public class TsetList01 {public static void main(String[] args) {test01();}public static void test01(){List<String> list=new ArrayList<>();list.add("A");list.add("B");list.add("C");list.add("D");System.out.println(list);list.add(2,"代止兮");System.out.println(list);list.remove(2);System.out.println(list);list.set(2, "代止兮");System.out.println(list);System.out.println(list.get(2));list.add("C");list.add("B");list.add("A");System.out.println(list);System.out.println(list.indexOf("B")); //找到,返回索引位置System.out.println(list.indexOf("d")); //找不到,返回-1System.out.println(list.lastIndexOf("B"));} }


?ArrayList特點和底層實現

ArrayList底層是用數組實現的存儲。? ?特點:查詢效率高,增刪效率低,線程不安全。

ArrayList底層使用Object數組來存儲元素數據

數組長度是有限的,而ArrayList是可以存放任意數量的對象,長度不受限制,那么它是怎么實現的呢?本質上就是通過定義新的更大的數組,將舊數組中的內容拷貝到新數組,來實現擴容。

自定義實現一個ArrayList,體會底層原理

第一個版本:

package cn.dym11;// 自定義實現一個ArrayList,體會底層原理public class SxtArrayList {private Object[] elementData;private int size;private static final int DEFAULT_CAPACITY=10;public SxtArrayList() {elementData=new Object[DEFAULT_CAPACITY];}public SxtArrayList(int capacity) {elementData=new Object[capacity];}public void add(Object obj) {elementData[size++]=obj;}public String toString() {StringBuilder sb=new StringBuilder();// [a,b,c]sb.append("["); // for(Object obj:elementData) { // sb.append(obj); // } // sb.append("]");for(int i=0;i<size;i++) {sb.append(elementData[i]+",");}sb.setCharAt(sb.length()-1, ']');return sb.toString();}public static void main(String[] args) {SxtArrayList s1=new SxtArrayList(20);s1.add("aa");s1.add("bb");System.out.println(s1);} }

//增加泛型
//增加數組擴容

package cn.dym11;// 自定義實現一個ArrayList,體會底層原理 //增加泛型 //增加數組擴容 public class SxtArrayList02<E> {private Object[] elementData;private int size;private static final int DEFAULT_CAPACITY=10;public SxtArrayList02() {elementData=new Object[DEFAULT_CAPACITY];}public SxtArrayList02(int capacity) {elementData=new Object[capacity];}public void add(E element) {// 什么時候擴容??if(size==elementData.length) {//怎么擴容?? //擴容操作Object[] newArray=new Object[elementData.length+(elementData.length>>1)];System.arraycopy(elementData, 0, newArray, 0,elementData.length );elementData=newArray;} elementData[size++]=element;}public String toString() {StringBuilder sb=new StringBuilder();// [a,b,c]sb.append("["); // for(Object obj:elementData) { // sb.append(obj); // } // sb.append("]");for(int i=0;i<size;i++) {sb.append(elementData[i]+",");}sb.setCharAt(sb.length()-1, ']');return sb.toString();}public static void main(String[] args) {SxtArrayList02 s1=new SxtArrayList02(20);for(int i=0;i<40;i++) {s1.add("dym"+i);}System.out.println(s1);} }

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 色噜 | 99久久精品国产成人一区二区 | 久久机热这里只有精品 | 国产一区二区三区视频在线观看 | 国产精品人人做人人爽 | 天堂国产在线 | 国产欧美日本在线 | 青青青青在线 | 精品少妇一区二区三区密爱 | 在线a毛片 | 天天天天天干 | 秋霞网av | 成人免费直播 | 日韩在线网 | 三上悠亚中文字幕在线播放 | 极品国产一区 | 99综合色 | 国产午夜精品在线 | 自拍偷拍福利视频 | av资源在线免费观看 | 亚洲视频欧美视频 | 日本少妇色视频 | 电影91久久久 | 精品一区中文字幕 | 五月激情在线 | 韩国三级在线视频 | 自拍偷在线精品自拍偷无码专区 | 亚洲精品视频大全 | 高潮在线视频 | 一区二区三区欧美精品 | 原创少妇半推半就88av | 国产在线拍揄自揄拍无码视频 | 男生女生插插插 | 日本欧美黄色 | 嫩草视频一区二区三区 | 牲欲强的熟妇农村老妇女视频 | 色桃av | 日本黄色一区 | 亚洲福利视频网 | 午夜视频www | а√中文在线资源库 | 黄网站免费入口 | 曰本黄色片 | 色诱av | 免费日韩 | 操碰视频| 亚洲欧美在线视频 | 日韩在线一 | 欧美精品一区二区三区视频 | 丁香花在线影院观看在线播放 | 日韩视频a| 四虎国产在线 | 天天操夜夜操夜夜操 | 久久噜 | 久久看看 | 久久99精品久久久久子伦 | 亚洲美女色视频 | 国产亚洲久久 | 亚洲欧美成人网 | av首页在线观看 | 韩国一区二区视频 | 国产一级18片视频 | 国产视频精品一区二区三区 | 日批视频在线看 | 毛片大全免费 | 思思久久久 | 国产另类ts人妖一区二区 | 亚洲欧洲日韩国产 | 91色在线| 欧美毛片在线 | 大屁股白浆一区二区 | av色哟哟| 亚洲国产日韩欧美一区二区三区 | 91蜜桃臀久久一区二区 | 国产做爰全过程免费视频 | 深爱五月网 | 密臀av在线播放 | 1024毛片| jizzjizzjizz亚洲女 | 一区二区三区在线免费观看 | 一级国产精品 | 污污小视频 | 久久亚洲中文字幕无码 | 熟女丰满老熟女熟妇 | 日韩区一区二 | 黄色自拍网站 | 超碰国产91| 2020av在线| 97人妻精品一区二区三区动漫 | 在线免费观看污片 | 老头老夫妇自拍性tv | 亚洲一区第一页 | 蜜桃视频无码区在线观看 | 精品熟妇视频一区二区三区 | 国产一级在线观看视频 | 三级电影网址 | 色噜噜一区二区 | 日韩高清不卡在线 | 黄色片网站免费在线观看 |