黑马程序员----集合:
集合用来存储引用数据类型,长度可变化,类型也可变,因此事存储并操作对象的一种更有效的方式。
数组也可以用来存储基本数据类型和引用数据类型,可是数组长度的不可变性限制了对数组的操作。
因此集合用于存储不同类型的对象,长度可变;数组可以存储任意类型而长度不可变。
集合框架
派生出来的两个Java集合类:
Collection Map
List :元素有序,可存放重复对象,有索引
Set :元素是无序的,不能重复,无索引
Collection提供的方法:作为父类,子类继承了父类的方法。
改:
boolean add(Object o):向集合添加一个元素。
boolean addAll(Collection c);向集合添加集合。
Eg:New List().add(“新加入元素”);
void clear():清除集合里面的全部元素。
Eg:list1.clear();
boolean remove(Object o):删除集合中特定元素o。
boolean removeAll(Collectionc):从集合中删除集合c里面的元素。
boolean retainAll(Collectionc):从集合中删除集合c里不包含的元素。
Object[] toArray():把集合转成一个数组。
查:
boolean contains(Object o):判断集合里是否包含特定的元素。
booleancontainsAll(Collection c):判断集合里是否包含集合c内全部的元素。
boolean isEmpty():判断集合是否为空。
int size():获得集合元素的个数。
取:
Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素,被称为迭代器。
迭代器接口具有的方法:
booleanhasNext():判断是否还有元素。
Object next():获得下一个元素。
void remove():删除集合上一次next()方法返回的元素。
Eg: Iteratorit = list1.Iterator();
while(it.hasNext())
System.out.println(it.next());
List:区别于其他集合,List有索引,可以通过操作角标操作元素。判断(contains和remove)内部是否有相同元素时使用的是元素本身的equals方法。可以通过重写的equals方法改变判断的方式。
ArrayList:底层数据结构是数组结构,因此查询速度块。线程不同步。
LinkedList:链表数据结构。因此增删很快。线程不同步。
Vector:底层是数组数据结构。线程同步
增:
Add(index,element):在index添加元素,其他元素按顺序后移。
addAll(index,Collection):添加集合。
删:
Remove(index):删除特定位置的元素。
改:
Get(index,element);改变特定位置上的元素。
查:
Get(index):获取特定位置index的元素。
subList(from,to):从开始和结束位置获取部分元素。
indexOf(ele):获取特定元素的位置。
取:
listIterator():list特有的列表迭代器,可以添加,修改内部元素。
列表迭代器接口特有的方法:
hasPrevious,判断前面是否还有元素。
previous返回上一个元素。
LinkedList特有方法有:
增:
offerFirst():从前面增加元素进入链表。
offerLast():从后面增加元素进入链表。
取:
peekFirst():获取第一个元素,不删除元素。
peekLast():获取最后一个元素,不删除元素。
pollFirst():获取第一个元素,删除元素。
pollLast():获取最后一个元素,删除元素。
Eg:
public static voidmain(String[] args)
{
ArrayList al = new ArrayList();
al.add(“第1个元素”);
al.add(“第2个元素”);
al.add(“第3个元素”);
al.remove(2);
System.out.println(al);
}
SET:元素存取无序且不可以重复。具有的方法和父类一致。
HashSet:(数据结构是哈希表)查询速度快。线程不安全。判断元素是否相同的依据为:hashCode(先判断)和equals(后判断)来完成。在开发的时候一般都会复写equals和hashcode方法。
TreeSet:(二叉树)是SortedSet接口实现唯一的类。可以对Set集合中的元素依据:元素通过实现Comparable接口并重写compareTo 的方法提供排序依据;让set集合实现实现Comparator接口并覆盖compare方法提供的排序依据。
Eg1:
public int compareTo(Objectobj)
{
if(this.num>obj.num)
return 1;
return -1;
}
Eg2:
//在创建TreeSet集合对象时,提供一个Comparator对象负责元素的排序。Set<Student1> s =new TreeSet(new Comparator()
{
@Override
public intcompare(Object o1, Object o2)
{
if(o1instanceof Student1 & o2 instanceof Student1)
{
Student1s1 = (Student1)o1;
Student1s2 = (Student1)o2;
if(s1.getAge() > s2.getAge())
{
return -1;
}
else if(s1.getAge() <s2.getAge())
{
return 1;
}
}
return 0;
}
});
Map:Map集合里存在key和映射的value值,其中Map里的key不可重复,那么通过key可以找到唯一的value。Key与value的关系存在于Map接口的内部接口Map.Entry中。
HashTable:哈希列表,线程同步,不可存unll;
HashMap:哈希列表,线程不同步,可存unll;
TreeMap:二叉树,线程不同步,可按标准排序。
其中Map的常见方法有:
增:
Object put(Object key,Objectvalue):添加一个新的key-value对,已有的会覆盖原来。
void putAll(Map m):增加m中的key-value到调用者集合中去。
Eg:
Map m = new HashMap();
m.put(1, new persong(“jack”));
删:
void clear():删除所有的key-value。
Object remove(Object key):删除指定key所对应的key-value对。
查:
boolean containsKey(Objectkey):查询Map中是否包含特定的key。
boolean containsValue(Object value):查询Map中是否有值;
boolean isEmpty():判断Map集合是否为空;
int size():返回该Map里面key-value对的个数;
取:
Object get(Object key):返回指定key所对应的value,若此Map中不包含该key,返回null;
Collection values():返回Map里所有value组成的Collection。
Eg:
Collection c = m.values();
Set entrySet():返回Map所包含的key-value对所组成的Set集合,其中每个集合元素都是Map.Entry对象。
Entry是Map接口里面的一个内部接口,用于封装key- value,帮助遍历Map集合,提供3个方法:
Object getKey():返回Entry里包含的key值
Object getValue():返回Entry里包含的value值
Object setValue(Object value):设置Entry里包含的value值,并返回新设置的value值;
Eg:
Map<Integer, String> m = newHashMap<Integer, String>();
Set s =m.entrySet();
Iterator it= s.iterator();
while(it.hasNext())
{
Map.Entryme = (Entry) it.next();
System.out.println(me.getKey()+""+me.getValue());
}
Set keySet():返回该Map中所有key所组成的Set集合,遍历Map的第二种方式。
Eg:
s = m.keySet();
it = s.iterator();
while(it.hasNext())
{
int i = (int)it.next();
System.out.println(i+""+m.get(i));
}
如果把集合视作对象,那么操作集合的类就是:
Collections类:
具有的全部静态方法有:
改:
static void reverse(List list):反转List集合元素的顺序。
static void shuffle(Listlist):对集合内部元素按照随机进行排序。
static void sort(List list):自然排序
static boolean replaceAll(List list, Object oldVal, ObjectnewVal) 使用另一个元素替换所有某一个指定的元素。
static vois swap(Listlist,int i, int j):交换List集合i处元素和j处元素。
static void rotate(List list,int distance):
若distance为正数,将list集合后的distance个元素移到前面。
当distance为负数,将list集合前的distance个元素移到后面。
static void fill(List list,Object obj) :使用指定元素替换所有元素。
取:
static int binarySearch(Listlist, Object key) 用二分搜索法搜索list,以获得key。注意子啊调用前要对list进行自然排序。
static Object max(Collectioncoll):获得最大元素。
static Object min(Collectioncoll):获得最小元素。
static intfrequency(Collection c, Object o) :获得特定对象的元素数。
static intindexOfSubList(Listsource, List target) 获得源集合中中第一次出现的指定目标列表的起始位置,若无返-1。
static intlastIndexOfSubList(List source, List target) 获得最后一次起始位置若无返-1。
toArray():将集合变为 数组以限制对集合长度的改变操作。
Arrays:
用于操作数组的工具类。
AsList(arr):将arr数组变为集合,改变后只可操作内部元素,不可改变长度。