Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。
Java集合工具包位置是 java.util.*;
Java集合主要可以划分为4个部分:List列表, Set集合, Map映射, 工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)
Collection接口
·是List, Set和Queue接口的福接口
·定义了可用于操作List, Set和Queue的方法。
List接口
·List是元素有序并且可以重复的集合,被称为序列
·List可以精确的控制每个元素的插入位置,或删除某个位置元素
·List接口的常用子类:ArrayList, LinkedList, Vector, Stack.
Set接口
·Set接口中不能加入重复元素,无序
·Set接口常用子类:
散列存放:HashSet
有序存放: TreeSet
Map和HashMap
·Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value.
·Map中的键值对以Entry类型的对象实例形式存在
·键不能重复,value值可以重复
·Map支持范型,形式如:Map.
HashMap类
·HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现
·HashMap中的Entry对象是无序排列的
·key值和value值都可以为null, 但是一个HashMap只能有一个key值为null的映射。
Java提供了Dictionary,Vector,Stack和Properties这些类用来存储和操作对象组。
Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
Collection 接口又有三种子类型,List, Set, 和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList,LinkedList, HashSet, HashMap等等。
集合框架是用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
1.接口
2.实现类
3.算法
Java集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java,util包中,所以当使用集合框架的时候需要进行导包。
集合接口
Set和List的区别:
1.Set接口实例存储的是无序的,不重复的数据。List接口实例存储的是有序的,可以重复的元素。
2.Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
3.List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入效率低,因为会引起其他元素位置的改变。
集合实现类(集合类)
Java提供了一套实现了Collection接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的实现部分。
集合算法
集合框架定义了集中算法,可用于集合和映射。这些算法被定义为集合类的静态方法。
如何使用迭代器
通常情况下,你会希望遍历一个集合中的元素。
一般遍历数组都是采用for循环或者增强for循环,这两种方法可以用在集合框架中。
但还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator接口或者ListIterator接口。
遍历ArrayList
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Jack");
//第一种遍历,使用for each遍历List
for(String str : list){
System.out.println(str);
}
//第二种遍历,把链表变为数组相关的内容进行遍历
String[] strArray = new String[list.size()];
list.toArray(strArray);
for(int i = 0; i < strArray.length; i++){
System.out.println(strArray[i]);
}
//第三种遍历,使用迭代器进行相关遍历
Iterator<String> ite = list.iterator();
while(ite.hasNext()){
System.out.println(ite.next());
}
}
}
遍历Map
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "string1");
map.put("2", "string2");
map.put("3", "string3");
//通过Map.KeySet遍历key和value
for(String key : map.keySet()){
System.out.println("key: " + key + " and value= " + map.get(key));
}
//通过Map.entrySet使用iterator遍历key和value
Iterator<Map.Entry<String, String>> ite = map.entrySet().iterator();
while(ite.hasNext()){
Map.Entry<String, String> entry = ite.next();
System.out.println("key= " + entry.getKey() + " + and value= " + entry.getValue());
}
//第三种,通过Map.entrySet遍历key和value
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第四种,通过Map.values()遍历所有的value,但不能遍历key
for(String v : map.values()){
System.out.println("value= " + v);
}
}
}
ArrayList和LinkedList的区别
ArrayList是List接口的一种实现,它是用数组来实现的;
LinkedList是List接口的一种实现,它是用链表来实现的。
网友评论