⑴ java的集合類型有哪些
Java集合類型主要有3種:set(集)、list(列表)和map(映射)。
Collection、Set和List的區別如下:
Collection對象之間沒有指定的順序,允許有重復元素和多個null元素對象;它是Set和List介面的父類,是一種最通用型的集合介面;
Set各個元素對象之間沒有指定的順序,不允許有重復元素,最多允許有一個null元素對象;
List各個元素對象之間有指定的順序,允許重復元素和多個null元素對象;
⑵ java集合有哪些
Java集合類存放在java.util包中,是一個用來存放對象的容器。
注意:
1.集合只能存放對象。比如你存入一個int型數據66放入集合中,其實它是自動轉換成Integer類後存入的,Java中每一種基本數據類型都有對應的引用類型。
2.集合存放的都是對象的引用,而非對象本身。所以我們稱集合中的對象就是集合中對象的引用。對象本身還是放在堆內存中。
3.集合可以存放不同類型,不限數量的數據類型。
一、List集合:(有序,元素可以重復)
1、ArrayList集合:
1)底層數據結構是數組,查找快,增刪慢。
2)線程不安全,效率高
2、Vector集合:
1) 底層數據結構是數組,查詢快,增刪慢
2)線程安全,效率低
3、LinkedList集合:
1) 底層數據結構是鏈表,查詢慢,增刪快
2)線程不安全,效率高
二、Set集合(元素不可重復,元素唯一)
1、Hashset集合:
1) 底層數據結構是哈希表,哈希表依賴兩個方法hascode ()和equals()方法
2)兩個方法的執行順序:
首先判斷hascode()值是否相同
是:繼續執行equals()方法,看其返回值
是true:說明元素重復,不添加
是false:就直接添加元素
否:就直接添加到集合
2、Treeset集合:
1)底層數據結構是二叉樹
⑶ Java中「集合」是啥意思集合類的「集合」
在java語言提供的工具類里,一般集合指的是實現了Collection介面的類。
主要是Set、List、Queue
Collection介面方法如下
當然 還有很多很多,就不一一舉例了。
另外如果你願意完全可以定義自己的集合,說白了不就是按照自己的邏輯把對象放在一起么~~~一般實現存、取、排序 就OK了。
⑷ java中有哪些類
如下:
String 字元串類
System 可得到系統信息
StringBuilder 字元串工具類
Thread 線程類
Math 與數學有關的工具類
ArrayList 底層用數組實現的集合
LinkedList 底層用鏈表實現的集合
HashMap 介面Map的一個實現類
HashSet 介面Set的一個實現類
Scanner 簡單文本掃描器
Calendar 日期類
Date 日期類
File 目錄或文件操作類
FileInputStream 輸入流
FileOutputStream 輸出流
BufferedInputStream 具有緩沖的輸入流
BufferedOutputStream 具有緩沖的輸出流
BufferedReader 從字元輸入流中讀取文本,緩沖各個字元
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
⑸ java中的集合分類
JAVA集合框架特徵介紹(詳細的去看看動力節點的java基礎大全301集就知道了)
Collection介面結構
其中,有幾個比較常用的方法,比如方法add()添加一個元素到集合中,addAll()將指定集合中的所有元素添加到集合中,contains()方法檢測集合中是否包含指定的元素,toArray()方法返回一個表示集合的數組。Collection介面有三個子介面,下面詳細介紹。
1.List
List介面擴展自Collection,它可以定義一個允許重復的有序集合,從List介面中的方法來看,List介面主要是增加了面向位置的操作,允許在指定位置上操作元素,同時增加了一個能夠雙向遍歷線性表的新列表迭代器ListIterator。AbstractList類提供了List介面的部分實現,AbstractSequentialList擴展自AbstractList,主要是提供對鏈表的支持。下面介紹List介面的兩個重要的具體實現類,也是我們可能最常用的類,ArrayList和LinkedList。
ArrayList
通過閱讀ArrayList的源碼,我們可以很清楚地看到裡面的邏輯,它是用數組存儲元素的,這個數組可以動態創建,如果元素個數超過了數組的容量,那麼就創建一個更大的新數組,並將當前數組中的所有元素都復制到新數組中。假設第一次是集合沒有任何元素,下面以插入一個元素為例看看源碼的實現。
1、方法add(E e)向集合中添加指定元素。 public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e; return true;
}2、此方法主要是確定將要創建的數組大小。 private void ensureCapacityInternal(int minCapacity) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
} private void ensureExplicitCapacity(int minCapacity) {
modCount++; if (minCapacity - elementData.length > 0)
grow(minCapacity);
}3、最後是創建數組,可以明顯的看到先是確定了添加元素後的大小之後將元素復制到新數組中。 private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0)
newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win:
elementData = Arrays.Of(elementData, newCapacity);
}
LinkedList
同樣,我們打開LinkedList的源文件,不難看到LinkedList是在一個鏈表中存儲元素。
在學習數據結構的時候,我們知道鏈表和數組的最大區別在於它們對元素的存儲方式的不同導致它們在對數據進行不同操作時的效率不同,同樣,ArrayList與LinkedList也是如此,實際使用中我們需要根據特定的需求選用合適的類,如果除了在末尾外不能在其他位置插入或者刪除元素,那麼ArrayList效率更高,如果需要經常插入或者刪除元素,就選擇LinkedList。
2.Set
Set介面擴展自Collection,它與List的不同之處在於,規定Set的實例不包含重復的元素。在一個規則集內,一定不存在兩個相等的元素。AbstractSet是一個實現Set介面的抽象類,Set介面有三個具體實現類,分別是散列集HashSet、鏈式散列集LinkedHashSet和樹形集TreeSet。
散列集HashSet
散列集HashSet是一個用於實現Set介面的具體類,可以使用它的無參構造方法來創建空的散列集,也可以由一個現有的集合創建散列集。在散列集中,有兩個名詞需要關注,初始容量和客座率。客座率是確定在增加規則集之前,該規則集的飽滿程度,當元素個數超過了容量與客座率的乘積時,容量就會自動翻倍。
⑹ java中的集合有幾種
集合類是放在java.util.*;這個包里。集合類存放的都是對象的引用,而非對象本身,為了說起來方便些,我們稱集合中的對象就是指集合中對象的引用(reference)。引用的概念大家不會忘了吧,在前邊我們講數據類型時講的。
集合類型主要有3種:set(集)、list(列表)、map(映射)和Queue(隊列)。//隊列為jdk5中的加上的
(1) Set
集(set)是最簡單的一種集合,它的對象不按特定方式排序,只是簡單的把對象加入集合中,就像往口袋裡放東西。對集中成員的訪問和操作是通過集中對象的引用進行的,所以集中不能有重復對象。我們知道數學上的集合也是Set這個,集合裡面一定是沒有重復的元素的。
(2)List
列表(List)的主要特徵是其對象以線性方式存儲,沒有特定順序,只有一個開頭和一個結尾,當然,它與根本沒有順序的Set是不同的。它是鏈表嘛,一條鏈肯定有順序這個順序就不一定了。
(3)Map
映射(Map),這個在java里不是地圖的意思,其實地圖也是映射哈。它裡面的東西是鍵-值對(key-value)出現的,鍵值對是什麼呢?舉個例子,比如我們查字典,用部首查字法。目錄那個字就是鍵,這個字的解釋就是值。鍵和值成對出現。這樣說可以理解吧。這也是很常用的數據結構哦。
(4)Queue
在jdk5.0以前,通常的實現方式是使用java.util.List集合來模仿Queue。Queue的概念通過把對象添加(稱為enqueuing的操作)到List的尾部(即Queue的後部)並通過從List的頭部(即Queue的前部)提取對象而從 List中移除(稱為dequeuing的操作)來模擬。你需要執行先進先出的動作時可以直接使用Queue介面就可以了。
這4個東西,有時候功能還不太完善,需要有些子類繼承它的特性。Set的子介面有TreeSet,SortedSet,List的有ArrayList等,Map里有HashMap,HashTable等,Queue裡面有BlockingQueue等。我們來看看例子吧:
實踐: Set舉例
import java.util.*;
public class SetExample {
public static void main(String[] args) {
Set set = new HashSet(); //HashSet是Set的子介面
set.add("one");
set.add("second");
set.add("3rd");
set.add(new Integer(4));
set.add(new Float( 5.0F ));
set.add("second");
set.add(new Integer(4));
System.out.println(set);
}}
List舉例:
import java.util.*;
public class ListExample {
public static void main(String[] args) {
List list = new ArrayList();
list.add("one");
list.add("second");
list.add("3rd");
list.add(new Integer(4));
list.add(new Float( 5.0F ));
list.add("second");
list.add(new Integer(4));
System.out.println(list);
}}
Map舉例
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.io.FileReader;
public class MapExample {
public static void main(String[] args) throws java.io.FileNotFoundException {
Map word_count_map = new HashMap();
FileReader reader = new FileReader(args[0]);
Iterator words = new WordStreamIterator(reader);
while ( words.hasNext() ) {
String word = (String) words.next();
String word_lowercase = word.toLowerCase();
Integer frequency = (Integer)word_count_map.get(word_lowercase);
if ( frequency == null ) {
frequency = new Integer(1);
} else {
int value = frequency.intValue();
frequency = new Integer(value + 1);}
word_count_map.put(word_lowercase, frequency);
}
System.out.println(word_count_map);
}}
Queue舉例:
import java.io.IOException;
import java.io.PrintStream;
import java.util.LinkedList;
import java.util.Queue;
public class QueueTester {
public Queue<String> q; //發現了一個奇怪的語法,這個尖括弧是泛型聲明
public QueueTester() {q = new LinkedList<String>();}
public void testFIFO(PrintStream out) throws IOException {
q.add("First");
q.add("Second");
q.add("Third");
Object o;
while ((o = q.poll()) != null) {
out.println(o);}}
public static void main(String[] args) {
QueueTester tester = new QueueTester();
try { tester.testFIFO(System.out);
} catch (IOException e) {
e.printStackTrace(); } }}
⑺ JAVA中幾種集合(List、Set和Map)的區別
Set對每個對象只接受一次,並使用自己內部的排序方法(通常,你只關心某個元素是否屬於Set,而不關心它的順序--否則應該使用List)。Map同樣對每個元素保存一份,但這是基於"鍵"的,Map也有內置的排序,因而不關心元素添加的順序。如果添加元素的順序對你很重要,應該使用 LinkedHashSet或者LinkedHashMap. 總結:List有順序有重復沒有排序,set無重復有排序,map的key也和set一樣。如果想跟List一樣需要有插入元素的順序,請使用LinkedHashSet或者LinkedHashMap。 List的功能方法 實際上有兩種List: 一種是基本的ArrayList,其優點在於隨機訪問元素,另一種是更強大的LinkedList,它並不是為快速隨機訪問設計的,而是具有一套更通用的方法。 List : 次序是List最重要的特點:它保證維護元素特定的順序。List為Collection添加了許多方法,使得能夠向List中間插入與移除元素(這只推薦LinkedList使用。)一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。 ArrayList : 由數組實現的List。允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。ListIterator只應該用來由後向前遍歷ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷要大很多。 LinkedList : 對順序訪問進行了優化,向List中間插入與刪除的開銷並不大。隨機訪問則相對較慢。(使用ArrayList代替。)還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何介面或基類中定義過)使得LinkedList可以當作堆棧、隊列和雙向隊列使用。 Set的功能方法 Set : 存入Set的每個元素都必須是唯一的,因為Set不保存重復元素。加入Set的元素必須定義equals()方法以確保對象的唯一性。Set與Collection有完全一樣的介面。Set介面不保證維護元素的次序。 HashSet : 為快速查找設計的Set。存入HashSet的對象必須定義hashCode()。 TreeSet : 保存次序的Set, 底層為樹結構。使用它可以從Set中提取有序的序列。 LinkedHashSet : 具有HashSet的查詢速度,且內部使用鏈表維護元素的順序(插入的次序)。於是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。 Map的功能方法 方法put(Object key, Object value)添加一個「值」(想要得東西)和與「值」相關聯的「鍵」(key)(使用它來查找)。方法get(Object key)返回與給定「鍵」相關聯的「值」。可以用containsKey()和containsValue()測試Map中是否包含某個「鍵」或「值」。標準的Java類庫中包含了幾種不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它們都有同樣的基本介面Map,但是行為、效率、排序策略、保存對象的生命周期和判定「鍵」等價的策略等各不相同。 執行效率是Map的一個大問題。看看get()要做哪些事,就會明白為什麼在ArrayList中搜索「鍵」是相當慢的。而這正是HashMap提高速度的地方。HashMap使用了特殊的值,稱為「散列碼」(hash code),來取代對鍵的緩慢搜索。「散列碼」是「相對唯一」用以代表對象的int值,它是通過將該對象的某些信息進行轉換而生成的。所有Java對象都能產生散列碼,因為hashCode()是定義在基類Object中的方法。 HashMap就是使用對象的hashCode()進行快速查詢的。此方法能夠顯著提高性能。 Map : 維護「鍵值對」的關聯性,使你可以通過「鍵」查找「值」 HashMap : Map基於散列表的實現。插入和查詢「鍵值對」的開銷是固定的。可以通過構造器設置容量capacity和負載因子load factor,以調整容器的性能。 LinkedHashMap : 類似於HashMap,但是迭代遍歷它時,取得「鍵值對」的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用鏈表維護內部次序。 TreeMap : 基於紅黑樹數據結構的實現。查看「鍵」或「鍵值對」時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在於,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。 WeakHashMao : 弱鍵(weak key)Map,Map中使用的對象也被允許釋放: 這是為解決特殊問題設計的。如果沒有map之外的引用指向某個「鍵」,則此「鍵」可以被垃圾收集器回收。 IdentifyHashMap : 使用==代替equals()對「鍵」作比較的hash map。專為解決特殊問題而設計。
⑻ 簡敘java的集合框架,常見集合的特點有哪些
集合主要有Collection和Map介面。
List特點:元素有放入順序,元素可重復
Map特點:元素按鍵值對存儲,無放入順序
Set特點:元素無放入順序,元素不可重復(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)
List介面有三個實現類:LinkedList,ArrayList,Vector
LinkedList:底層基於鏈表實現,鏈表內存是散亂的,每一個元素存儲本身內存地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢
ArrayList和Vector的區別:ArrayList是非線程安全的,效率高;Vector是基於線程安全的,效率低
Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet
SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現)
Query介面有一個實現類:LinkList
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap
HashMap非線程安全,高效,支持null;HashTable線程安全,低效,不支持null
SortedMap有一個實現類:TreeMap
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,存儲的是鍵值對
set
一般無序不重復.map
kv
結構
list
有序
。
http://blog.csdn.net/vstar283551454/article/details/8682655
有用請採納,謝謝
⑼ JAVA的集合類型有哪些
Java API中所用的集合類,都是實現了Collection介面,他的一個類繼承結構如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Vector : 基於Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。性能也就不可能
超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector「sychronized」的,這個也是Vector和
ArrayList的唯一的區別。
ArrayList:同Vector一樣是一個基於Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但
是當運行到多線程環境中時,可需要自己在管理線程的同步問題。
LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方
面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像
基於Array的List一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢。
List總結:
1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
HashSet:雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是
在HashMap的基礎上來實現的,這個就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項。
⑽ java集合是什麼
Java集合是什麼:
Java 中的集合類庫可以幫助我們在程序設計中實現傳統的數據結構。
Java的集合類是一個用來存放對象的容器,有以下特點:
1、Java集合只能存放對象。加入添加了一個基本數據類型,會被自動裝箱後存入集合。
2、集合存放的是多個對象的引用,對象本身是在堆內存中的。
3、集合可以存放不同類型,不限數量的數據類型。
集合分三種:1、Set 2 、List 3、Map,下面進行具體介紹。
主要內容:
1)手寫ArrayList
2)手寫單鏈表
3)手寫LinkedList
4)手寫HashMap
5)手寫HashSet
6)最新並發集合類
學習目標:
1. 掌握手寫ArrayList
2. 掌握手寫單鏈表
3. 掌握手寫LinkedList
4. 掌握手寫HashMap
5. 掌握手寫HashSet
6. 理解最新並發集合類底層原理
視頻課程小結:
01_集合提升訓練_手寫ArrayList_get_size_isEmpty_自定義異常
02_集合提升訓練_手寫ArrayList_構造方法_add
03_集合提升訓練_手寫ArrayList_toString_iterator
04_集合提升循環_手寫單鏈表_get
05_集合提升訓練_手寫單鏈表_add_remove_toString
06_集合提升訓練_手寫LinkedList
07_集合提升訓練_手寫LinkedList_添加內存分配圖
08_集合提升訓練_HashMap的原理和代碼准備
09_集合提升訓練_手寫HashMap的put
10_集合提升訓練_手寫HashMap的get_toString
11_集合提升訓練_手寫HashSet
12_集合提升訓練_新一代並發集合類