今天的收获
首先说一下集合和数组的异同,集合和数组一样,也是存储数据的容器。区别如下:
1. 数组长度固定,集合长度可变。
2. 数组能存基本数据类型,也能存引用数据类型。集合只能存引用数据类型。
3. 数组只能存单一类型,集合能存任意引用类型。
集合下有两大接口,分别是List和Set。List下的子类有ArrayList,Vector,LinkedList。由于这三个类的使用相差不大,所以以ArrayList为例说一下使用的方法。
List:存入顺序和取出顺序一致,存储的元素可以重复。有序、可以重复。
ArrayList:底层是Object数组。
1. 增加:add 及其重载
2. 删除:remove(index)、remove(Object)、clear()
3. 修改:set(index ,Object)
4. 查找:contains():依据equals方法来判断是否包含该元素。indexOf。
5. 输出:for循环:size()、get(index).
特殊注意的地方:
1. set返回的该位置上原先的元素。
2. remove(Object): 移除此列表中首次出现的指定元素(如果存在)。
泛型:为了规范元素类型。避免强制类型转换。
Iterator:迭代器,用于取出集合中的元素
迭代器使用注意:
1. 要定义在循环的外面。
2. hasNext()方法不移地指针。next()方法移动指针。
3. 每一个迭代器只能迭代一次。
package day09; import java.util.ArrayList; import java.util.Iterator; public class TestArrayList { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("one");//增加元素one list.add(3+"");//增加元素2,由于使用了泛型所以得加"" list.add("three"); list.add(1, "two");//在下标1的地方增加元素two System.out.println(list);//输出list中的元素 System.out.println(list.remove(2));// 显示被删除的下标的元素 System.out.println(list.remove("two"));// 删除列表中首次出现的元素,如果存在返回true // list.clear();//移除此列表中的所有元素 String i = list.set(1,"two");// 返回结果是原先位置上的值 System.out.println(i); System.out.println(list); boolean f = list.contains(new String("one"));//如果此列表中包含指定的元素,则返回 true System.out.println(f); int index = list.indexOf("ttwo"); System.out.println(index);//返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1 for(int j=0;j<list.size();j++){ //返回此列表中的元素数 Object o = list.get(j);// Object o = new String("abc"); System.out.println(o); } Iterator<String> it = list.iterator(); while(it.hasNext()){//如果仍有元素可以迭代,则返回 true System.out.println(it.next());//返回迭代的下一个元素 } } }
下面开始说set接口,主要说一下它的HashSet类和TreeSet类。
Set:无序、元素唯一。
HashSet:底层hash表。
保证元素唯一通过hashcode和equals方法。
对于HashSet来说,判断元素是否存在,或者删除元素,都是靠hashcode和equals。
对于ArrayList来说,判断元素是否存在,或者删除元素,都是靠equals。
package day09.set; import java.util.HashSet; import java.util.Iterator; import java.util.Set; //HashSet会去掉重复,输出的时候是无序的,结果如下 //[one, two, five , four, three] //one two five four three //one two five four three public class TestHashSet { public static void main(String[] args) { Set<String> set = new HashSet<String>(); set.add("one"); set.add("two"); set.add("one"); set.add("three"); set.add("four"); set.add("five "); set.add("five "); System.out.println(set); Iterator<String> it = set.iterator(); while(it.hasNext()){ String s = it.next(); System.out.print(s+" "); } System.out.println(); for(String s : set){ System.out.print(s+" "); } } }
TreeSet:底层二叉树。
自动排序。依据的就是compareTo方法,要求存入其中的元素具有可比较性。
package day09.set; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; //TreeSet会自动排序,结果如下 //[A, B, C, D, E] public class TestTreeSet { public static void main(String[] args) { Set<String> set = new TreeSet<String>(); set.add("E"); set.add("B"); set.add("D"); set.add("A"); set.add("C"); System.out.println(set); // Iterator<String> it = set.iterator(); // while(it.hasNext()){ // System.out.println(it.next()); // } } }