今天的收获
首先说一下集合和数组的异同,集合和数组一样,也是存储数据的容器。区别如下:
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());
// }
}
}
转载于:https://blog.51cto.com/libaiqiang/1257598