集合类
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
import java.util.*;
class CollectionDemo
{
public static void main(string[] args)
{
method 2();
}
public static void method _2()
{
ArrayList all = new ArrayList();
all.add("java01");
all.add("java02");
all.add("java03");
all.add("java04");
ArrayList al2 = new ArrayList();
a12.add("java07");
a12.add("java02");
a12.add("java05");
a12, add("java06");
all.retainAl1(aI2);//去交集,all中只会保留和a12中相同的元素,
sop("ai1:" + a11);
sop("a12:" + a12);
}
pubilc static void sop(object obj)
{
system.out.println(obj);
}
}
}
Collection
l--List:元素是有序的,元素可以重复。因为该集合体系有索引、
l--set:元素是无序,元素不可以重复.
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index, element);
addAll(index, Collection );
remove(index);
改
set(index, element);
査
get(index):
sub List(from,to);
listIterator ();
import java.util.*;
class ListDemo
{
public static void sop(Object obj)
{
system.out.println(obj);
}
public static void main(string[] args)
{
ArrayList al = new ArrayList();
//添加元素
al, add("java01");
al.add("java02");
al.add("java03");
sop("原集合是:" + a1);
//在指定位置添加元素。
al.add(1, "java09");
//删除指定位置的元素。
//al. remove(2);
//修改元素。
//al. set(2,"java007");
//通过角标获取元素。
sop("ɡ = t(i) :" + a1.get(1));
sop(al);
//获取所有元素。
for (int x = 0; x < a1.size(); x++)
{
system.out.println("al(" + x + ")=" + al.get(x));
}
Iterator it = al.alliterator();
while (it.hasNext())
{
sop("next:" + it.next());
}
}
}
1)HashSet类
HashSet是Set集合最常用实现类,是其经典实现。HashSet是按照hash算法来存储元素的,因此具有很好的存取和查找性能。
HashSet具有如下特点:
♦ 不能保证元素的顺序。
♦ HashSet不是线程同步的,如果多线程操作HashSet集合,则应通过代码来保证其同步。
♦ 集合元素值可以是null。
HashSet存储原理如下:
当向HashSet集合存储一个元素时,HashSet会调用该对象的hashCode()方法得到其hashCode值,然后根据hashCode值决定该对象的存储位置。HashSet集合判断两个元素相等的标准是(1)两个对象通过equals()方法比较返回true;(2)两个对象的hashCode()方法返回值相等。因此,如果(1)和(2)有一个不满足条件,则认为这两个对象不相等,可以添加成功。如果两个对象的hashCode()方法返回值相等,但是两个对象通过equals()方法比较返回false,HashSet会以链式结构将两个对象保存在同一位置,这将导致性能下降,因此在编码时应避免出现这种情况。
HashSet查找原理如下:
基于HashSet以上的存储原理,在查找元素时,HashSet先计算元素的HashCode值(也就是调用对象的hashCode方法的返回值),然后直接到hashCode值对应的位置去取出元素即可,这就是HashSet速度很快的原因。
重写hashCode()方法的基本原则如下:
♦ 在程序运行过程中,同一个对象的hashCode()方法返回值应相同。
♦ 当两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法返回值应该相等。
♦ 对象中用作equals()方法比较标准的实例变量,都应该用于计算hashCode值。