集合与数组
数组的优点:
- 数组一旦初始化,长度就是确定的
- 数组存储数据类型单一
- 通过数组索引的方式调用数组元素
- 数组中存储的多个元素是有序的,可以重复的,使用的内存空间是连续的
数组的弊端:
- 一旦初始化,长度就不可变
- 数组中操作面较简单,没有涉及到增,删,改,查,等操作的方法
- 针对与开发中的复杂问题,使用数组难以完全描述,比如:存储无序的,不可重复的数据
集合:
- Collection接口:存储的是一个一个的数据
- ---->List接口:有序的可重复的数据
- --->ArrayList,LinkedList,Vector
- ---->Set接口:无序的不可重复的数据
- --->HashSet,LinkedSet,TreeSet
- ---->List接口:有序的可重复的数据
- Map接口:存储的是一对一对的数据,key-value
- ----->HashMap,LinkedMap,TreeMap,Hashtable,Properties
集合框架的优点:解决了数组操作多个对象中的弊端
注意:向Collection添加对象,必须重写该对象的equals()方法
Collection的常用方法;
package collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import org.junit.Test; public class CollectionTest { @Test public void test1() { //添加元素 Collection coll=new ArrayList(); coll.add("aa"); coll.add(new Object()); coll.add(1); System.out.println(coll); //获取集合长度 System.out.println(coll.size()); //.addAll() Collection coll1=new ArrayList<>(); coll1.add(2); coll1.addAll(coll); System.out.println(coll1); //clear()清空集合 coll.clear(); //判断集合是否为空 System.out.println(coll.isEmpty()); coll1.add(new Person("tom", 12)); System.out.println(coll1); //contions(Object obj)方法:判断元素是否包含obj元素 //其实是调用了Object 中的equals()方法 //使用该方法必须重写所在类的equals()方法 System.out.println(coll1.contains(new Person("tom", 12))); //contionsAll():判断coll1所有元素是否都存在于coll集合 System.out.println(coll.containsAll(coll1)); //remove():删除 //此时要确保存在哟删除的元素存在于该集合内 coll.add("abcd"); coll.remove("abcd"); System.out.println(coll); //removAll()从当前集合删除与coll集合共有的元素 System.out.println(coll1.removeAll(coll)); //retainAll():获取当前集合与coll集合共有的元素 System.out.println(coll1.retainAll(coll)); //equals()方法 //hashCode() //toArray():集合转换为数组 coll1.add("aaaa"); Object [] arr=coll1.toArray(); System.out.println(Arrays.toString(arr)); //数组转换为集合 Collection c=Arrays.asList(new String[] {"aaa","ddd","ccc"}); System.out.println(Arrays.asList("mm")); System.out.println(c); } }
//使用Iterator()迭代器
初始化Collection 集合接口: Collection c=new ArrayList();
调用该集合的iterator方法来生成迭代器对象 Iterator iterator=c.iterator();
package collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.junit.Test; public class IteratorTest { @Test public void test1() { Collection c=new ArrayList(); c.add("mm"); c.add(new Person("Tom", 12)); // System.out.println(c); //iterator():返回一个迭代器实例 Iterator iterator=c.iterator(); // System.out.println(iterator.getClass()); // System.out.println(iterator.next()); // System.out.println(iterator.next()); //System.out.println(iterator.hasNext()); //for for (int i = 0; i < c.size(); i++) { System.out.println(iterator.next()); } //增强for循环 /* * for(要遍历的集合的元素的类型 临时变量:要遍历的集合变量){ * sout(临时变量); * } */ for (Object object : c) { System.out.println(object); } //hasNext()推荐 while (iterator.hasNext()){ System.out.println(iterator.next()); } } }