下面来探索集合吧!!!
一.什么是集合
1.1集合概念
集合就是一个容器,一个能够动态增长长度的容器。我们可以把多个各种各样的存储对象放到这个容器中。取数组不同的是,数组只能同时存储一种相同类型的数据,并且数组长度也不是理想的,
,数组长度一旦定义就无法改变。
集合给我们在实际应用当中起了很大作用。Java中对于各种数据结构的实现,就是我们用到的集合。
二.集合API
Java
的集合框架是由很多接口、抽象类、具体类组成的,都位于
java.util
包中。
三.List接口及实现类
List(单列)接口继承了collection接口,有三个实现类
ArrayList:
数组列表,底层是一个数组,数据采用数组方式存储。查询快,增添删除慢。
LinkedList:
链表,底层是一个双向链表,数据采用链表方式存储,查询慢,增添删除快
Vector:
和ArrayList一样,唯一不同的是该实现类都上了锁 synchronized,线程安全
四.List接口集合迭代
方法一:for循环遍历
public class ListDemo4 {
public static void main(String[] args) {
/*List集合遍历方法1for循环*/
ArrayList<String> arrayList=new ArrayList();//创建一个集合对象
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");//添加
//遍历arraylist
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
}
}
for循环还可以对元素进行修改
public class ListDemo4 {
public static void main(String[] args) {
/*List集合遍历方法1for循环*/
ArrayList<String> arrayList=new ArrayList();//创建一个集合对象
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");//添加
//遍历arraylist
for (int i = 0; i < arrayList.size(); i++) {
if("a".equals(arrayList.get(i))){
arrayList.remove("a");//删除元素a
}
i--;
}
}
}
方法二:增强for循环
public class ListDemo4 {
public static void main(String[] args){
/*List集合遍历方法1for循环*/
ArrayList<String> arrayList=new ArrayList();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
//List集合遍历方法增强for循环,不能对元素进行修改
for(String s:arrayList){
System.out.println(s);
}
}
}
与fo循环不同的是,增强for循环不能对元素进行操作了,只是遍历
方法三:使用迭代器遍历
public class ListDemo4 {
public static void main(String[] args){
ArrayList<String> arrayList=new ArrayList();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
//List集合遍历方法3,使用迭代器遍历 iterator
Iterator<String> iterator=arrayList.iterator();
while(iterator.hasNext()){
String s=iterator.next();
if("a".equals(s)){
iterator.remove();//对元素进行删除操作
}
}
}
}
此方式也可以对元素进行操作
五.Set接口及实现类
Set接口继承了Collection接口。 Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
Set接口有两个实现类
HashSet:
元素不可重复,存储对象须重写hashcode()和equals()
TreeSet:
元素进行指定方式的排序
,
存储的对象必须实现Comparable接口,重写comparaTo()。
六.Set接口集合迭代
方式一:增强for循环
public class TestSet {
public static void main(String[] args) {
TreeSet<String> treeSet=new TreeSet<>();
treeSet.add("aaa");
treeSet.add("uuu");
treeSet.add("eee");
treeSet.add("sss");
treeSet.add("ddd");
treeSet.add("ccc");//添加元素
// 增强for循环遍历treeSet
for (String s:treeSet) {
System.out.println(s);
}
}
}
方法二: 迭代器遍历
public class TestSet {
public static void main(String[] args) {
TreeSet<String> treeSet=new TreeSet<>();
treeSet.add("aaa");
treeSet.add("uuu");
treeSet.add("eee");
treeSet.add("sss");
treeSet.add("ddd");
treeSet.add("ccc");//添加元素
//迭代器遍历
Iterator<String> iterator = treeSet.iterator();
while (iterator.hasNext()){
String s=iterator.next();
System.out.println(s);
}
}
}
七.Map(双列)接口及实现类
Map概念:
将键映射到值的对象, 一个映射不能包含重复的键 ,每个键最多只能映射到一个值
Map实现类
HashMap:
HashMap中元素的key值不能重复, 排列顺序是不固定的,可以存储一个
为null的键
TreeMap:
TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序
的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
Hashtable:
实现了同步。
不能存储为null的键
八.Map迭代器
方法一:
根据键找值, 获取所有键的集合 ,遍历键的集合,获取到每一个键 ,根据键找值
//方法一:先拿到所有键,遍历键,根据键找值
Set<String> keySet=hashMap.keySet();
for (String key:keySet) {
System.out.println(key+"="+hashMap.get(key));
}
方法二:
根据键值对对象找键和值 , 获取所有键值对对象的集合 ,遍历键值对对象的集合,获取到每一个键值对对象 ,根据键值对对象找键和值
//方法二:
Set<Map.Entry<String,String>> entries =hashMap.entrySet();
for (Map.Entry entry:entries) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
九.Collections类
是一个工具类,Collections是集合类的工具类,与数组的工具类Arrays类似.
addAl l(Collection<? super T> c, T... elements);
binarySearch(List<? extends Comparable<? super T>> l ist, T key)
sort(List<T> l ist)
sort(List<T> l ist, Comparator<? super T> c)
swap(List<?> l ist, int i, int j)
copy(List<? super T> dest, List<? extends T> src) ;
注意
dest size
需大于等于
src.size
fi l l(List<? super T> l ist, T obj)
max(Col lection<? extends T> col l)
min(Col lection<? extends T> col l)
replaceAl l(List<T> l ist, T oldVal, T newVal)
reverse(List<?> l ist)
shuffle(List<?> l ist)
随机排序
copy(dest,src)
集合复制