java中基本的類集
頂層的介面Collection介面和Map介面
1.collection下有三個常用的實現類:list、set、vector(list和set都是執行緒不安全的,效率高,對資料的查詢快。而vector是執行緒安全的,效率低)。
1.1 arraylist容器是底層是一個object型別的陣列,我們所知道的自動擴容其實就是一個方法,對每一次向陣列中新增物件的時候都會進行一次判斷,噹噹前的要新增的物件位置的數值大於等於當前物件陣列的容量時,就進行擴容。簡單實現的方法是
package com.src.test;
public class MyArrayList {
private Object[] obj;
private int size;
public MyArrayList() {
this(10);
}
public MyArrayList(int i) {
if (i <= 0) {
try {
throw new Exception();
} catch (Exception e) {
e.getStackTrace();
}
}
obj = new Object[i];
}
public void add(Object o) {
if (size >= obj.length) {
Object[] array = new Object[size * 2];
System.arraycopy(obj, 0, array, 0, obj.length);
obj = array;
}
obj[size++] = o;
}
public Object get(int index) {
if (index < 0 || index >= size) {
try {
throw new Exception();
} catch (Exception e) {
e.getStackTrace();
}
}
return obj[index];
}
public void remove(int index) {
int removeIndex = size - index - 1;
System.arraycopy(obj, index + 1, obj, index, removeIndex);
}
}
其中的set,get,add方法實現說到底就是對陣列的新增和刪除等,contain則是遍歷obj陣列對其中的每一個值進行判斷。如果有則返回true,沒有則返回false。
這其中的關鍵是構造方法是個關鍵,無參的構造方法會呼叫一個有引數的構造方法,進行初始的obj空間大小的賦值。每一次新增的時候都會進行判斷容量是否夠。
1.2 linkedlist的關鍵我認為是組合的運用,在linkedlist類中有其他的類,Node(節點)。
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { transient int size = 0; transient Node<E> first; transient Node<E> last; public LinkedList() { } private void linkFirst(E e) { final Node<E> f = first; final Node<E> newNode = new Node<>(null, e, f); first = newNode; if (f == null) last = newNode; else f.prev = newNode; size++; modCount++; } public boolean add(E e) { linkLast(e); return true; }
在linkendlist中有三個基本屬性,first node,last node和size,Node類中有三個屬性,previous node,next node 和Object obj。分別是上一個節點下一個節點和盛放屬性的object物件。
2.Map下有有兩個常用的實現類:hashmap,hashtable。
2.1 這其中的關鍵是用空間換時間。建立索引。
相關推薦
Object,scanner,String,StringBuffer,Java中基本類型的包裝類型等
Object類scanner Scanner類 String和StringBuffer java中基本類型的包裝類型 math類的幾個常用方法 一、Scanner類 Scanner類:簡單文本掃描器1、鍵盤錄入步驟:(1)需要創建鍵盤錄入對象:Scanner 鍵盤錄入對象=new Scan
java中基本的類集
頂層的介面Collection介面和Map介面1.collection下有三個常用的實現類:list、set、vector(list和set都是執行緒不安全的,效率高,對資料的查詢快。而vector是執行緒安全的,效率低)。1.1 arraylist容器是底層是一個ob
java中基本數據類型數據轉化成byte[]數組存儲
結果 另一個 pre args pack return static 一個數 勿噴 java中基本數據類型數據轉化成byte[]數組存儲 1 package com.wocqz.test; 2 3 public class testByte { 4 5
在Java中String類為什麽要設計成final?String真的不可變嗎?其他基本類型的包裝類也是不可變的嗎?
數據 pri 創建 long tde 繼承 set 字符串常量 通過 最近突然被問到String為什麽被設計為不可變,當時有點懵,這個問題一直像bug一樣存在,竟然沒有發現,沒有思考到,在此總結一下。 1.String的不可變String類被final修飾,是不可繼承和修改
JAVA中Timer類的基本使用
菜雞遇到多執行緒 只有慢慢記錄慢慢體會 1.schedule方法 我們先來看timerTask這個類 是個實現runnable介面的抽象類,run方法自己重寫,具體跟runnable沒太大區別
Java中基本資料型別與包裝類,字串轉換
儲存範圍大小: byte-short-char-int-long-float-double 低階到高階自動型別轉換: int i = 5; float f = i; double d = i; 高階到低階強制型別轉換: int a = 20; byte b = (byte) a;
JAVA中實體類為啥不用使用基本資料型別?
由於基本資料型別都有其預設值,列入private int age,這裡的age預設是0,我們對實體類進行操作時,age總是會有值,無法對age變成null的情況,並且在動態SQL時,總會出現age!=null時總是為true,會出現一系列的隱藏的問題。 所以咯,不用在建立實
Java中基本資料型別與對應的包裝類和引用資料型別
基本資料型別變數儲存的是值,引用型別儲存的是物件的引用(物件的地址)。 基本資料型別不具有物件的特性,當有些地方必須要使用物件的時候,例如集合類(List,Set等),基本資料型別就不能使用了,所以Java提供了包裝類。基本資料型別可以進行加減乘除等運算,而包裝類提供了很多
Java中基本資料型別的封裝類
在java中,存在一些基本資料型別,而這些資料型別則都有著對應的封裝類。 public class testBasic { public static void main(String[] arg
java中String類型轉換為yyyy-MM-dd的Date類型
col code edate birt mat led div get sys String birthday ="2017-02-22"; SimpleDateFormat sdf = new SimpleDateFormat(("yyyy-MM-dd")); jav
java中clob類型的值處理
string類型 reat 測試 () eat string json pri 類型轉換 1、String類轉換Clob類型 private Clob clobStr; private String Str="測試值"; clobStr = Hibernate.create
Java中集合類容器初步了解
equals treemap 輸入 strong 字符串數組 通過 system 結構 shm 容器(Collection) 數組是一種容器,集合也是一種容器 java編程中, 裝其他各種各樣的對象(引用類型)的一種東西, 叫容器 (圖書
在java中String類為什麽要設計成final?
tro cli lai 這一 引用 沒有 num 重新 static 大神鏈接:在java中String類為什麽要設計成final? - 程序員 - 知乎 我進行了重新排版,並且更換了其中的一個例子,讓我們更好理解。 String很多實用的特性,比如說“不可變性”,是工
java中Set類接口的用法
集合類型 aaa sys nbsp all spa 元素 equal stub 在Java中使用Set,可以方便地將需要的類型,以集合類型保存在一個變量中.主要應用在顯示列表. Set是一個不包含重復元素的collection。更確切地講,set 不包含滿足 e1.equa
Java之基本類庫學習
decimal ren 常量池 blog 新建 random類 使用 ring org JAVA基本類庫: (一),輸入相關 main(String[] args):設置輸入參數 輸入類;Scanner:Scanner sc=new Scanner(S
【Java】基本類型和引用類型(值傳遞)
適合 and span print pri right bre enc this 【關鍵詞】 【問題】 · 加深對基本類型和引用類型的理解; 【效果圖】 【分析】 參見最後的【參考資料】 【解決方式】 【代碼】 public
Java中抽象類和接口的區別
pre data 區分 信息 展示 關於 面向 得出 lose 在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向對象能力。abstract class和interfac
在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作
cnblogs 讀寫 acc com ces 作用 分享 進行 .com 在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作
java中File類getPath()、getAbsolutePath()、getCanonicalPath()區別?
mil dir block user out div cnblogs test file 簡單看一下描述,例子最重要。 1、getPath(): 返回定義時的路徑,(就是你寫什麽路徑,他就返回什麽路徑) 2、getAbsolutePath(): 返回絕對路徑,但不會
java中的類與對象
共享 泛化 不能 變量聲明 eas diag 特征 類變量 set 面向對象編程主要有三個特征:封裝、繼承和多態。 封裝 一個簡單的問題 一個能輸出圓的面積的Java應用程序。 public class ComputerCircleArea