1. 程式人生 > >java中基本的類集

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

JavaString為什麽要設計成final?String真的不可變嗎?其他基本型的包裝也是不可變的嗎?

數據 pri 創建 long tde 繼承 set 字符串常量 通過 最近突然被問到String為什麽被設計為不可變,當時有點懵,這個問題一直像bug一樣存在,竟然沒有發現,沒有思考到,在此總結一下。 1.String的不可變String類被final修飾,是不可繼承和修改

JAVATimer基本使用

菜雞遇到多執行緒 只有慢慢記錄慢慢體會 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

javaString型轉換為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

javaclob型的值處理

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編程中, 裝其他各種各樣的對象(引用類型)的一種東西, 叫容器     (圖書

javaString為什麽要設計成final?

tro cli lai 這一 引用 沒有 num 重新 static 大神鏈接:在java中String類為什麽要設計成final? - 程序員 - 知乎 我進行了重新排版,並且更換了其中的一個例子,讓我們更好理解。 String很多實用的特性,比如說“不可變性”,是工

javaSet接口的用法

集合類型 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

javaRandomAccessFile的作用:對指定文件可以進行讀寫的操作

cnblogs 讀寫 acc com ces 作用 分享 進行 .com 在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作

javaFilegetPath()、getAbsolutePath()、getCanonicalPath()區別?

mil dir block user out div cnblogs test file 簡單看一下描述,例子最重要。 1、getPath():   返回定義時的路徑,(就是你寫什麽路徑,他就返回什麽路徑) 2、getAbsolutePath():   返回絕對路徑,但不會

java與對象

共享 泛化 不能 變量聲明 eas diag 特征 類變量 set 面向對象編程主要有三個特征:封裝、繼承和多態。 封裝 一個簡單的問題 一個能輸出圓的面積的Java應用程序。 public class ComputerCircleArea