Java-集合框架
一、集合框架的概述
* 1.集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
* 说明:此时的存储,主要指内存层面的存储,不涉及到持久化的存储(.txt,.jpg,数据库中的存储)
*
* 2.1数组在存储多个数据方面的特点:
* 》一旦初始化之后,其长度就确定了
* 》数组一旦定义好了,其元素的类型也确定了。我们只能操作指定类型的数据了。比如String [] arr;
* 2.2 数组在存储多个数据方面的缺点
* 》一旦初始化之后,其长度就不可修改
* 》数组中提供的方法非常有限,对于添加、删除插入数据等操作,非常不方便,同时效率不高。
* 》获取数组中的实际元素的个数的需求,数组没有现成的属性或方法可用
* 》数组存储数据的特点:有序、可重复。对于无序、不可重复的需求不能满足。
*
*二、集合框架
* Collection接口:单列集合,用来存储一个一个的对象
* 子接口List:存储有序的、可重复的数据 “动态”数组
* ArrayList
* LinkedList
* Vector
*
*
* 子接口Set:存储无序的、不可重复的数据
* HashSet
* LinkedHashSet
* TreeSet
*
* Map接口:双列集合,用来存储一对(key-value)一对的数据 y=f(x)
* HashMap
* LinkedHashMap
* TreeMap
* Hashtable
* Properties
*
*三、Collection接口中的方法
1.add(Object e);
2.add(Object e):将元素e添加到集合当中
3.size():获取添加的元素的个数
4.addAll(Collection c):将c集合中的元素添加到当前集合中
5.clear():清空集合元素
6.isEmpty():判断当前集合是否为空
7.contains(Object obj):判断当前集合中是否包含obj
8.contains(Object obj)调用的是equals
9.containsAll(Collection c):判断形参c中所有元素是否都存在于当前集合中
10.remove():移除某一个数据(也需要重写类中的equals方法)
11.removeAll(Collection c):从当前集合中移除c中所有元素(差集)
12.retainAll(Collection c):获取当前结合与c集合的交集,并返回结果给当前集合
13.equals(Object obj):判断当前集合和形参集合的元素是否都相同
14.hashcode():放回当前对象的hash值,自定义对象需要重写hashcode()方法
15.toArray():集合 --->数组
16.Arrays.asList(T... a):数组 -->集合
17.iterator():返回Iterator接口的实例,用于遍历集合元素
import org.junit.Test; import java.lang.reflect.Array; import java.util.*; /** * * * * * 一、集合框架的概述 * 1.集合、数组都是对多个数据进行存储操作的结构,简称Java容器。 * 说明:此时的存储,主要指内存层面的存储,不涉及到持久化的存储(.txt,.jpg,数据库中的存储) * * 2.1数组在存储多个数据方面的特点: * 》一旦初始化之后,其长度就确定了 * 》数组一旦定义好了,其元素的类型也确定了。我们只能操作指定类型的数据了。比如String [] arr; * 2.2 数组在存储多个数据方面的缺点 * 》一旦初始化之后,其长度就不可修改 * 》数组中提供的方法非常有限,对于添加、删除插入数据等操作,非常不方便,同时效率不高。 * 》获取数组中的实际元素的个数的需求,数组没有现成的属性或方法可用 * 》数组存储数据的特点:有序、可重复。对于无序、不可重复的需求不能满足。 * *二、集合框架 * Collection接口:单列集合,用来存储一个一个的对象 * 子接口List:存储有序的、可重复的数据 “动态”数组 * ArrayList * LinkedList * Vector * * * 子接口Set:存储无序的、不可重复的数据 * HashSet * LinkedHashSet * TreeSet * * Map接口:双列集合,用来存储一对(key-value)一对的数据 y=f(x) * HashMap * LinkedHashMap * TreeMap * Hashtable * Properties * *三、Collection接口中的方法 * *Iterator迭代器(获取数据) * @author orz */ public class CollectionTest { /** *三、Collection接口中的方法 * 1.add(Object e); * * */ @Test public void test1() { Collection coll=new ArrayList(); //add(Object e):将元素e添加到集合当中 coll.add("AA"); coll.add(123); coll.add(new Date()); //size():获取添加的元素的个数 System.out.println(coll.size()); //addAll(Collection c):将c集合中的元素添加到当前集合中 Collection coll2=new ArrayList(); coll2.addAll(coll); System.out.println(); System.out.println(coll2.size()); //clear():清空集合元素 coll2.clear(); System.out.println(); System.out.println(coll2.isEmpty()); //isEmpty():判断当前集合是否为空 Collection coll3=new ArrayList(); System.out.println(); System.out.println(coll3.isEmpty()); //contains(Object obj):判断当前集合中是否包含obj System.out.println(); boolean contains = coll.contains("AA"); System.out.println(contains); Collection coll4=new ArrayList(); coll4.add(123); coll4.add("tom"); coll4.add(new String("Cat")); Person p=new Person(23,"TOM"); coll4.add(p); //contains(Object obj)调用的是equals System.out.println(); System.out.println(coll4.contains(new String("Cat"))); //false -->true 考虑重写Person的equals方法 System.out.println(coll4.contains(new Person(23, "TOM"))); //containsAll(Collection c):判断形参c中所有元素是否都存在于当前集合中 System.out.println(); coll2.addAll(coll); System.out.println(coll2.containsAll(coll)); //remove():移除某一个数据(也需要重写类中的equals方法) System.out.println(); System.out.println(coll); coll.remove(123); System.out.println(coll); //removeAll(Collection c):从当前集合中移除c中所有元素(差集) System.out.println(); System.out.println(coll); System.out.println(coll2); coll2.removeAll(coll); System.out.println(coll2); //retainAll(Collection c):获取当前结合与c集合的交集,并返回结果给当前集合 Collection coll5=new ArrayList(); coll5.addAll(coll2); coll5.add("789"); System.out.println(); System.out.println(coll5); System.out.println(coll2); coll5.retainAll(coll2); System.out.println(coll5); //equals(Object obj):判断当前集合和形参集合的元素是否都相同 Collection coll6=new ArrayList(); coll6.add("789"); coll6.add(123); Collection coll7=new ArrayList(); coll7.add("789"); coll7.add(123); System.out.println(); System.out.println(coll6.equals(coll7)); Collection coll8=new ArrayList(); coll8.add(123); coll8.add("789"); //false;ArrayList是有序的 System.out.println(coll6.equals(coll8)); //hashcode():放回当前对象的hash值,自定义对象需要重写hashcode()方法 System.out.println(); System.out.println(coll8.hashCode()); //toArray():集合 --->数组 System.out.println(); Object[] obj=coll8.toArray(); for(Object arr:obj) { System.out.println(arr); } // Arrays.asList(T... a):数组 -->集合 System.out.println(); List<String> list = Arrays.asList(new String[]{"AA","BB"}); System.out.println(list); //错误写法 List<int[]> list1 = Arrays.asList(new int[]{123, 334}); System.out.println(list1); //正确 List<Integer> list2 = Arrays.asList(13, 78); System.out.println(list2); //或者 List<Integer> list3 = Arrays.asList(new Integer[]{123, 78}); System.out.println(list3); //iterator():返回Iterator接口的实例,用于遍历集合元素 //hasNext(); //next(); System.out.println(); Iterator iterator = coll8.iterator(); System.out.println(coll8); while (iterator.hasNext()) { System.out.println(iterator.next()); } iterator=coll8.iterator(); //迭代器Iterator中的remove(),可以在遍历时删除集合中元素。不同于集合中直接调用remove(); //如果未调用next()或者上一次调用next()方法之后已经调用了remove()方法,再次调用remove()都会报异常 while (iterator.hasNext()) { Object obj2=iterator.next(); //删除集合中的“789” if("789".equals(obj2)) { iterator.remove(); } } iterator=coll8.iterator(); System.out.println(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } /** * foreach循环 * 增强for循环遍历集合或数组 * 内部仍然调用迭代器 */ @Test public void test2() { Collection coll=new ArrayList(); //add(Object e):将元素e添加到集合当中 coll.add("AA"); coll.add(123); coll.add(new Person(21,"tom")); coll.add(new Date()); //for(集合中元素类型 自定义变量名:集合对象) // { // //...... // } for (Object obj:coll) { System.out.println(obj); } //遍历数组 int [] arr=new int[]{1,2,3,4,5,6,7,8,9}; for (int i:arr) { System.out.println(i); } } }
import java.util.Objects; public class Person implements Comparable{ private int age; private String name; public Person() { } public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "age=" + age + ", name='" + name + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(age, name); } //按照姓名从小到大排序,年龄从小到大 @Override public int compareTo(Object o) { if(o instanceof Person) { Person person=(Person)o; // return this.name.compareTo(person.name); int compare=this.name.compareTo(person.name); if(compare!=0) { return compare; } else { return Integer.compare(this.age,person.age); } } else { throw new RuntimeException("输入的类型不匹配"); } } }