集合概述
◆如果现在要想保存多个对象,肯定使用对象数组完成,但是对象数组本身有一个最大的问题在于其数据的长度,所以后来使用了链表完成了动态对象数组的开发,可是链表的开发难度实在是很大,而且如果一个链表要想真正去使用,只依靠之前所编写的还不够,还需要进行一些代码的调优。
而JDK1.2之后正式引入了类集的概念,类集是一种动态的对象数组,属于各个数据结构的实现类,在整个类集之中主要的组成是一些核心的操作接口:Collection、List、Set、Map、Iterator.
Collection
Collection(单值保存的最大父接口)
所谓的单值保存指的是每一次操作只会保存一个对象,就好像之前的链表程序一样,每一次只保存了一个对象,在 Collection接口之中定义了如下的一些操作方法。
List
List(允许重复的子接口)
List是 Collection的一个最为常用的子接口,首先这个接口的定义如下:
public interface List<E> extends Collection<E>
ArrayList
ArrayList是List子接口使用最多的一个子类,而这个类的定义如下:
public class ArrayList<E>extends abstractlist<E>implements List<E>, RandomAccess, Cloneable, Serializable
使用 ArrayList进行List接口的功能验证
public static void main(String[] args) throws Exception {//ArrayList<String> all = new ArrayList<String>();也可以这样写List<String> all = new ArrayList<String>();all.add("Hello");all.add("He11o");//内容重复了all.add("World");for (int x = 0; x < all.size(); x++) {String str = all.get(x);// get()方法只有List接口有System.out.print(str + ",");}ArrayList<Integer> integers = new ArrayList<>();ArrayList<Integer> integers2 = new ArrayList<Integer>();integers.add(1);integers.add(2);integers.add(3);for (int i=0;i<integers.size();i++){int n = integers.get(i);System.out.println(n);}}
在使用代码的时候可以发现,List集合之中即使存在了重复数据,也可以正常的保存,而且数据保存的顺序就是存入数据的顺序。
eg:
public interface Animal {public String getName() ;public int getAge();}
public class Dog implements Animal {private String name ;private int age ;public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic String getName() {return name;}@Overridepublic int getAge() {return age;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true ;}if (obj == null) {return false ;}if (!(obj instanceof Dog)) {return false ;}Dog dog = (Dog) obj ;if (this.name.equals(dog.name)&& this.age == dog.age) {return true ;}return false ;}@Overridepublic String toString() {return "〖狗的信息〗名字:" + this.name + ",年龄:" + this.age ;}}
public class Tiger implements Animal {private String name ;private int age ;public Tiger(String name, int age) {this.name = name;this.age = age;}@Overridepublic String getName() {return name;}@Overridepublic int getAge() {return age;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true ;}if (obj == null) {return false ;}if (!(obj instanceof Tiger)) {return false ;}Tiger t = (Tiger) obj ;if (this.name.equals(t.name)&& this.age == t.age) {return true ;}return false ;}@Overridepublic String toString() {return "〖老虎的信息〗名字:" + this.name + ",年龄:" + this.age ;}}
import java.util.ArrayList;import java.util.List;public class Zoo {private List<Animal> animals = new ArrayList<Animal>(); //多个动物public void add(Animal ani) { // 增加动物this.animals.add(ani) ; // 增加动物,this可以省略}public void delete(Animal ani) {this.animals.remove(ani) ; // 需要equals()}public List<Animal> search(String keyWord) {List<Animal> result = new ArrayList<Animal>() ;for (int x = 0 ; x < this.animals.size() ; x ++) {Animal ani = this.animals.get(x) ;if (ani.getName().contains(keyWord)) { // 满足result.add(ani) ;}}return result ;}}
public class Main {public static void main(String[] args) {Zoo zoo = new Zoo() ; // 动物园zoo.add(new Dog("花狗",1)) ;zoo.add(new Dog("黄狗",1)) ;zoo.add(new Dog("黑狗",1)) ;zoo.add(new Dog("斑点狗",1)) ;zoo.add(new Tiger("斑点虎",2)) ;zoo.add(new Tiger("黑虎",2)) ;zoo.add(new Tiger("花虎",2)) ;zoo.delete(new Dog("斑点狗",1)) ; // 删除List<Animal> result = zoo.search("斑点") ;for (int x = 0 ; x < result.size() ; x ++) {System.out.println(result.get(x)) ;}}}
Set
Set是元素无序并且不可以重复的集合,被称为集
HashSet-哈希集,是Set的一个重要实现类
常用方法也是
1.add addAll
3.size
4.remove
5.removeAll
set接口的实现类,HashSet
Set<String> all = new HashSet<String>();HashSet<String> all2= new HashSet<String>();all.add("Hello");all.add("Hello");//内容重复了,不会被添加进去all.add("World");System.out.println(all);
Iterator-集合的输出
Set<String> all = new HashSet<String>();HashSet<String> all2= new HashSet<String>();all.add("Hello");all.add("Hello");//内容重复了,不会被添加进去all.add("World");//遍历//获取迭代器Iterator<String> iter = all.iterator();//循环while (iter.hasNext()){//判断是否有下一个元素String str = iter.next();System.out.println(str+"、");}
Map
Map和HashMap
Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找 value
Map中的键值对以 Entry类型的对象实例形式存在
键(key值)不可重复,vaue值可以
Map支持泛型,Map
Map中常用方法,put(key,value)、putA添加元素,get(key)获取元素,remove(key)删除
使用迭代器遍历Map
方法一:
public static void main(String[] args) throws Exception {Map<Integer,String> map = new HashMap<Integer,String>();map.put(3,"张三");map.put(null,"无名氏");map.put(3,"李四");//key重复,value会被新内容覆盖map.put(1,"王五");map.put(0,"赵六");Set< Integer> set=map.keySet();//取得全部的keyIterator<Integer>iter = set.iterator();while(iter.hasNext()) {Integer key = iter.next();System.out.println(key + "-->" + map.get(key));}}
方法二:
public static void main(String[] args) throws Exception {Map<Integer,String> map = new HashMap<Integer,String>();map.put(3,"张三");map.put(null,"无名氏");map.put(3,"李四");//key重复,value会被新内容覆盖map.put(1,"王五");map.put(0,"赵六");Set< Map.Entry<Integer,String>> set=map.entrySet();Iterator<Map.Entry<Integer,String>> iter = set.iterator();while(iter.hasNext()){Map.Entry<Integer,String> me = iter.next();System.out.println(me.getKey()+","+me.getValue());}}
Map和 Collection作用
Collection接口设置完的内容目的是为了输出;
Map接口设置完内容的目的是为了查找。
public static void main(String[] args) throws Exception {List<String> all = new ArrayList<String>();Collections.addAll(all,"A","B","C");//把A,B,C都添加到集合all中System.out.println(all);Collections.reverse(all);//逆序System.out.println(all);}
