今天的收获

首先说一下集合和数组的异同,集合和数组一样,也是存储数据的容器。区别如下:

1. 数组长度固定,集合长度可变。

2. 数组能存基本数据类型,也能存引用数据类型。集合只能存引用数据类型。

3. 数组只能存单一类型,集合能存任意引用类型。

集合下有两大接口,分别是ListSetList下的子类有ArrayListVectorLinkedList。由于这三个类的使用相差不大,所以以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表。

保证元素唯一通过hashcodeequals方法。

对于HashSet来说,判断元素是否存在,或者删除元素,都是靠hashcodeequals

对于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());
//      }
}
}