1.集合概述
Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

2.Collection接口
Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
Set 中的数据对象没有顺序且不可以重复。
List中的数据对象有顺序且可以重复。
3.List接口及其实现类
List继承了Collection接口,有三个实现的类。
- ArrayList
数组列表,数据采用数组方式存储。
-LinkedList
链表
-Vector
数组列表,添加同步锁,线程安全的
public class VectorDemo {public static void main(String[] args) {Vector<String> vector=new Vector();vector.add("a");vector.add("a");vector.add("a");vector.add("a");vector.add("a");System.out.println(vector);}}
ArrayList实现了长度可变的数组,在内存中分配连续的空间。
遍历元素和随机访问元素的效率比较高。
LinkedList采用链表存储方式。插入、删除元素时效率比较高。
ArrayList的常用方法
add(int index, E element)
get(int index)
indexOf(Object o)
lastIndexOf(Object o)
remove(int index) 删除并返回指定位置元素
removeRange (int fromIndex, int toIndex) 删除指定区间的元素(子类继承使用)
set(int index, E element)
ArrayList<Integer> arrayList=new ArrayList();arrayList.add(100);arrayList.add(1,10);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);arrayList.add(20);//arrayList.clear();System.out.println(arrayList.contains(20));System.out.println(arrayList.isEmpty());System.out.println(arrayList.get(0));System.out.println(arrayList.remove(1));//删除System.out.println(arrayList.remove((Object)100));//删除某个值Object [] array=arrayList.toArray();System.out.println(Arrays.toString(array));//转数组System.out.println(arrayList);
LinkedList的常用方法
add(int index,Object element)
addFirist(Object element)
addLast(Object element)
get(int index)
removeFirst()
removeLast()
remove(int index)
getFirst()
getLast()
LinkedList<String> linklist=new LinkedList();linklist.add("a");linklist.add("a");linklist.add("a");linklist.add("a");linklist.add("a");//linklist.clear();linklist.addFirst("e");linklist.addLast("e");//peek 检索不删除//poll 检索并删除System.out.println(linklist.getFirst());System.out.println(linklist.pollLast());System.out.println(linklist.removeFirst());System.out.println(linklist.indexOf("a"));System.out.println(linklist.set(0,"s"));System.out.println(linklist.size());System.out.println(linklist);
List接口集合迭代
● for循环遍历
● 增强for循环的遍历
● 迭代器遍历(Iterator)
ArrayList<String> list = new ArrayList<>();list.add("a");list.add("a");list.add("b");list.add("c");list.add("d");/*//1.for循环for(int i=0;i<list.size();i++){String s=list.get(i);if(s.equals("a")){list.remove(s);i--;}}System.out.println(list);for循环会集合删除后会自动进位*//*//2.增强for循环for(String s:list){System.out.println(s);}*///迭代器iterator(Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String s = iterator.next();if (s.equals("a")) {iterator.remove();}}System.out.println(list);
4.Set 接口
● Set接口继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
● Set接口有两个实现类
● HashSet
HashSet类中的元素不能重复,即彼此调用equals方法比较,都返回false。
底层数据结构是哈希表+链表
哈希表依赖于哈希值存储
public class HashSetDemo1 {public static void main(String[] args) {HashSet<String> hashSet=new HashSet<>();hashSet.add("a");hashSet.add("白色");int a="红色".hashCode();System.out.println(a);hashSet.add("黑色");int a1="种地".hashCode();System.out.println(a1);hashSet.add("c");hashSet.add("d");System.out.println(hashSet);}
}
public class HashSetDemo {public static void main(String[] args) {HashSet<Car> hashSet=new HashSet<>();Car car1= new Car("宝马1",101);Car car5= new Car("宝马1",101);Car car2= new Car("宝马2",102);Car car3= new Car("宝马3",103);Car car4= new Car("宝马4",104);//在Car类中重写了hashcode方法,先对hash值进行比较,在对内容进行比较hashSet.add(car1);hashSet.add(car2);hashSet.add(car3);hashSet.add(car4);hashSet.add(car5);System.out.println(hashSet);}
● TreeSet
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
TreeSet底层数据结构是二叉树(红黑树是一种自平衡的二叉树)。
public class TreeSetDemo {public static void main(String[] args) {TreeSet<Car> treeSet=new TreeSet<>();Car car1= new Car("宝马1",101);Car car5= new Car("宝马1",101);Car car2= new Car("宝马2",102);Car car3= new Car("宝马3",103);Car car4= new Car("宝马4",104);treeSet.add(car1);treeSet.add(car3);treeSet.add(car5);treeSet.add(car2);treeSet.add(car4);System.out.println(treeSet);}
5.Set接口集合的迭代
遍历方式
增强for循环
迭代器遍历
ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");ListIterator<String> listIterator=list.listIterator();while(listIterator.hasNext()){String s=listIterator.next();System.out.println(s);}ListIterator<String> listIterator1=list.listIterator(list.size());while(listIterator.hasPrevious()){String s=listIterator.previous();System.out.println(s);}
上文中用到的Car类中重写了一系列方法。
package com.ffyc.collection;public class Car implements Comparable<Car> {String name;int num;public int compareTo(Car o) {return o.num-this.num;}public Car(String name, int num) {this.name = name;this.num = num;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Car car = (Car) o;if (num != car.num) return false;return name != null ? name.equals(car.name) : car.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + num;return result;}@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", num=" + num +'}';}}


















