1. Collection中能存放什么元素?
没有使用“泛型”之前, Collection中可以存储object的所有子类型。
使用了“泛型”之后, Collection中只能存储某个具体的类型。
集合后期我们会学习“泛型”语法。目前先不用管。Collection中什么都能存,
只要是object的子类型就行。( 集合中不能直接存储基本数据类型,也不能存
java对象,只是存储java对象的内存地址。)
2. Collection 中的常用方法
boolean add(0bject e)向集合中添加元素
int size()获取集合中元素的个数
void clear()清空集合
boolean contains(object o)判断当前集合中是否包含元素o,包含返回true ,不包含返回false
boolean remove
boolean remove(Object o)删除集合中的某个元素。
boolean isEmpty( )判断该集合中元素的个数是否为0
Object[] toArray()把集合转换成数组
public class CollectionTest01 {
public static void main(String[] args) {
//创建一个对象
//Collection c = new Collection(); //接口无法创建对象
//多态
Collection collection = new ArrayList();
//测试collection接口中的常用方法
collection.add(100);//实际上是自动装箱,放进去的是内存地址Integer x = 100;
collection.add(3.14);
collection.add(new Object());
collection.add(true);
collection.add(new Student());
//获取集合元素的个数
System.out.println("集合元素中的个数:" + collection.size());
//清空集合
collection.clear();
System.out.println("集合元素中的个数:" + collection.size());
//在向集合添加元素
collection.add("Hello");//实际放的是内存地址,不能存放基本数据类型变量
collection.add(1);
//判断集合中是否包含"Hello"
boolean f = collection.contains("Hello");
System.out.println(f);
boolean f1 = collection.contains(2);
System.out.println(f1);
//删除集合中某个元素
collection.remove(1);
//判断集合中是否还有1 false
boolean f2= collection.contains(1);
System.out.println(f2);
//判断集合是否为空 //true 的代表空 false 代表不为空
System.out.println(collection.isEmpty()); //false
collection.clear();
System.out.println(collection.isEmpty()); //true
System.out.println("-----------------------------------------");
//把集合转换成数组,了解使用不多
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
collection.add(new Student());
Object [] objects = collection.toArray();
for (int i = 0 ; i < objects.length ; i ++){
System.out.println(objects[i]);
}
}
}
class Student{}
深入collection中的remove和contains方法:
如果remove和contains的引用变量equls方法重写成比较内容的
如果是自定义类,eqlus方法没有重写比较的是内存地址,此方法结果相反,x引用变量就步包含在集合c里,remove方法也会返回false,集合元素为2。
public class CollectionTest03 {
public static void main(String[] args) {
//深入 collection 集合的 contains方法
Collection c = new ArrayList();
String s1 = new String("abc");
c.add(s1);
String s2 = new String("abc");
c.add(s2);
String x = new String("abc");
//集合中元素
System.out.println("集合中元素个数:" +c.size());
//c集合是否包含x?为什么会包含x呢? 我们并没有把x传到集合c里
//因为String的eqlus方法已经重写了 ,比较的是内容
System.out.println(c.contains(x));
//删除元素x 返回true 说明删除成功,比较的内容
System.out.println(c.remove(x));
System.out.println("集合中元素个数:" +c.size());
}
}
迭代器遍历
注意:迭代器遍历的时候,如果要删除元素,要用迭代器的remove方法,这样迭代器能更新迭代器里的内容
public class CollectionTset02{
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();//后边的集合无所谓,主要看接口collection
//添加元素
c.add("adb");
c.add(123);
c.add(1);
c.add("Hello");
c.add(new Object());
//对集合collection进行遍历/迭代
//第一步:获取集合对象的迭代器对象 Iterator
Iterator iterator = c.iterator();
//第二步:boolean hasNext() next()
while (iterator.hasNext()){//检查是否有下一个对象,如果有返回true 继续执行。
Object object = iterator.next();//获取元素值
iterator.remove();
System.out.println(object);
}
//查看元素个数
System.out.println(c.size());
}
}
总结(所有的实现类):
■ArrayList: 底层是数组。
■LinkedList: 底层是双向链表。
■Vector: 底层是数组,线程安全的,效率较低,使用较少。。
■HashSet: 底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合
key部分了。
■TreeSet:底层是TreeMap,放到TreeSet 集合中的元素等同于放到TreeMap集合key
部分了。
■HashMap:底层是哈希表。。
■Hashtable: 底层也是哈希表,只不过线程安全的,效率较低,使用较少。
■Properties: 是线程安全的,并且key和value只能存储字符串String。。
■TreeMap: 底层是二叉树。TreeMap集合的key可以自动按照大小顺序排序。
List集合存储元素的特点:
有序可重复。
有序:存进去的顺序和取出的顺序相同,每- -个元素都有下标。。
可重复:存进去1,可以再存储一个1
Set集合存储元素的特点:
无序不可重复。
无序:存进去的顺序和取出的顺序不一定相同。 另外Set集合中元素没有下标。
不可重复:存进去1,不能再存储1了。
SortedSet集合存储元素特点:
首先是无序不可重复的,但是SortedSet集合中的元素是可排序的。
无序:存进去的顺序和取出的顺序不一定相同。 另外Set集合中元素没有下标。
不可重复:存进去1,不能再存储1了。
可排序:可以按照大小顺序排列。
注意
Map集合的key,就是一个Set集合。
往Set集合中放数据,实际上放到了Map集合的key部分。