数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。
集合是一个容器,是一个载体,可以一次容纳多个对象。
在实际开发中,假设连接数据库,数据库当中有10条记录, 那么假设把这10条记录查询出来,在java程序中会将10条数据封装成10个java对象, 然后将10个java对象放到某一个集合当中, 将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
list.add(100); //自动装箱Integer 注意: 集合在java中本身是一个容器,是一个对象。 集合中任何时候存储的都是“引用”。存储元素,等于将数据放到了不同的数据结构当中。
什么是数据结构?
数据存储的结构就是数据结构。不同的数据结构,数据存储方式不同。例如: 数组、二叉树、链表、哈希表... 以上这些都是常见的数据结构。 你使用不同的集合等同于使用了不同的数据结构。java中你需要掌握的不是精通数据结构。java中已经将数据结构实现了,已经写好了这些常用的集合类,你只需要掌握怎么用?在什么情况下选择哪一种合适的集合去使用即可。
new ArrayList(); 创建一个集合,底层是数组。 new LinkedList(); 创建一个集合对象,底层是链表。 new TreeSet(); 创建一个集合对象,底层是二叉树。 .....一:把集合继承结构图背会。
二:把Collection接口中常用方法测试几遍。
三:把迭代器弄明白。
四:Collection接口中的remove方法和contains方法底层都会调用equals,
执行结果:
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class SetTest { public static void main(String[] args) { Collection c1=new ArrayList(); for (int i=0;i<10;i++){ c1.add(i); /**向集合添加元素**/ } Object[] obj1=c1.toArray(); /****集合中的元素返回存储到数组**/ System.out.print("c1.toArray()数组输出元素:"); for (int i=0;i<c1.size();i++){ System.out.print(obj1[i]+","); } System.out.println(); System.out.println("c1.size():"+c1.size()); /***集合的大小**/ System.out.println("c1.contains():"+c1.contains(1));/***是否包含元素1**/ c1.remove(1); /*****移除元素1***/ System.out.println("c1.contains():"+c1.contains(1));/***是否包含元素1**/ System.out.println("c1.size():"+c1.size()); /***集合的大小**/ System.out.println("c1.isEmpty():"+c1.isEmpty());/***集合是否为空**/ System.out.print("迭代器Iterator的i1.hasNext()、i1.next()输出元素:"); Iterator i1=c1.iterator(); while (i1.hasNext()){ /**先判断下一个是否还有?*****/ Object obj2=i1.next();/****返回下一个元素****/ System.out.print(obj2+",");/**输出*/ } System.out.println(); /*****Collection接口中的remove方法和contains方法底层都会调用equals,需要重写equals方法****/ User u1=new User("jack"); User u2=new User("jack"); /***注意此处添加的是u1**/ c1.add(u1); /**1、*//******重写equals方法,是为了让contains在调用底层equals时,比较对象的内容,而不是比较对象的内存地址* *执行c1.contains(u2)时,它会因为u1和u2内容相同,而返回true * 如果不重写equals就会返回false * */ System.out.println("重写equals方法,After c1.add(u1),c1.contains(u2)?:"+c1.contains(u2));/**返回true*/ /**2、*//***调用迭代器,输出集合中的元素,String类型的对象,需要在该类中重写toString()方法**/ System.out.print("迭代器Iterator的i2.hasNext()、i2.next()输出元素:"); Iterator i2=c1.iterator(); while (i2.hasNext()){ /**先判断下一个是否还有?*****/ Object obj2=i2.next();/****返回下一个元素****/ System.out.print(obj2+",");/**输出*/ } System.out.println(); /**3、*//******重写equals方法,也让remove在调用底层equals时,删除内容相同的对象,而不是按内存地址删除对象 * 所以c1.remove可以删除对象u1,因为两者内容相同 * **/ c1.remove(u2); System.out.print("重写equals方法,After c1.remove(u2),迭代器Iterator的i3.hasNext()、i3.next()输出元素:"); Iterator i3=c1.iterator(); while (i3.hasNext()){ /**先判断下一个是否还有?*****/ Object obj2=i3.next();/****返回下一个元素****/ System.out.print(obj2+",");/**输出*/ } System.out.println(); c1.clear();/***清空集合**/ System.out.println("c1.isEmpty():"+c1.isEmpty());/***集合是否为空**/ } } class User{ private String name; public User() { } public User(String name) { this.name = name; } /**1、重写equals方法*/ public boolean equals(Object obj){ if (null==obj || !(obj instanceof User)){ return false; } if (obj==this) return true; return ((User) obj).name.equals(this.name); } /**2、重写toString()方法*/ public String toString(){ return this.name; } }