---------------------- android培训、java培训、期待与您交流! ----------------------
集合的特点:集合只用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象。
因每个容器对数据的存储方式不同,所以分类出很多的容器。这个存储方式称为:数据结构。
import
举例:
//使用Collection接口的子类ArrayList类创建一个集合容器。
ArrayList
//添加元素
a1.add("A");//字符串也是对象
a1.add("B");
a1.add("C");
a1.add("D");
//获取个数(集合长度)
Syntem.out.println(a1.size());
//打印集合
Syntem.out.println(a1);
//
Collection接口的方法:
add();添加元素
1.add方法的参数类型是Object。以便于接收任意类型对象。
2.集合中存储的都是对象的引用(内存地址)。
addAll(
remove(
removeAll()
clear(
contains(
ContainsALL(
isEmpty(
retainAll(
iterator(
1.返回iterator接口子类对象,,返回在此
2.子类对象的相关方法
hasNext(
next()
remove()
举例:
Iterator
while(it.hasNext())
{
}
Collection下的一些常见子接口:
1.
特有方法。凡是可以操作角标的方法都是该体系的方法。
注意:List、子类等中的contains()/remove()等方法是在底层调用的equals()方法,所以如果自己定义的类对象存入集合中后进行集合操作用到这些方法时需要在自定义类中对equals方法重写形成自己的比较方法。
增加:
add(index,element);
addAll(index,Collection);
删除:
remove(index);
修改:
set(index,element);
查找:
get(index);
subList(from,to);
列表迭代器(List特有):
listIterator();
listIterator(index);
注:在操作时集合对象方法与迭代器不能同时操作元素,因为会发生异常,所以,在使用迭代器时只能使用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素进行判断、取出、删除的操作;如果想在迭代器时进行添加、修改等操作时就需要使用其子接口:ListIterator。该接口只能通过List集合的listIterator方法获取。
如:
ArrayList
ListIterator
li.add()
listIterator的一些方法:
add();
hasNext();
next();
nextIndex()
previous()
previousIndex()
remove()
set()
List下常见的子类:
ArrayList:底层的数据结构使用的是数组结构。
LinkedList:底层的数据结构使用的是链表数据结构。
addFirst()
addLast()
getFirst()
getLast()
removeFirst()
removeLast()
注意:以上方法如果集合中没有元素时会出现NoSuchElementException异常。所以在JDK1.6版本以后出现了以后新的方法。
offerFirst()
offerLast()
peekFirst()
peekLast()
pollFirst()
pollLast()
扩展:
堆栈数据结构:先进后出;
队列数据结构:先进先出;
Vector:底层的数据结构使用的是数组结构。
特点:查找增删都慢。线程同步。被ArrayList替代。
2.
Set集合的功能方法和Collection是一致的。
Set接口常见的子类:
1.
HashSet元素唯一性的原因,是通过元素的两个方法hashCode和equals来完成,如果元素的HashCode值相同,才会通过equals方法判断是否为true;如果元素的HashCode值不同则不会调用equals方法进行判断。
注意:对于元素的判断和删除等操作都是调用的hashCaode和equals方法,所以在自己定义对象类时通常需要重写hashCode和equals方法。
2.
TreeSet元素唯一性和排序(为主)的原因,是通过compareTo()方法对元素进行比较,是TreeSet集合对元素排序的依据,此方法的返回值是正数,负数,零,这个方法是Comparable接口中的。
注意:
第一种排序方式:自定义类,然后向TreeSet集合中存入自定义类的对象时,需要在自定义类中实现(implements)Comparable接口并在类中重写compareTo()方法形成自己的比较方法,另外需要注意的是在重写compareTo方法(排序)当主要条件相同时,一定要判断一下次条件(否则会视为重复元素,不会存入集合中)。
第二种排序方式:当元素(自定义类中的compareTo方法)自身不具备比较性时,或具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时,就具备比较方式,所以需定义比较器(定义类实现Comparator接口,在类中重写compare(Object
注:两种比较方式同时出现时,以比较器为先。
Map集合,接口:
基本特点:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。
共性方法:
添加:
put(K
putAll(Map<?
删除:
clear()
remove(Object
判断:
containsKey(Object
containsValue(Object
equals(Object
isEmpty()
获取:
get(Object
hashCode()
size()
values()
Set<Map.Entry<k,v>>
entrySet方法是将Map集合中的映射关系存入到Set集合中,而这个关系的数据类型就是Map.Entry;Map.Entry也是一个对象,用它的一些方法就可以取出关系中的键和值。Map.Entry的相关方法如下:
getKey()
getValue()
hashCode()
setValue(V
Set<k>
keySet方法将Map集合中所有的键存入到set集合,因为set集合具备迭代器,所以可以迭代方式取出所有的键,在根据get方法获取每个键对应的值。
Map下常见的类:
1.Hashtable类
底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。
2.HashMap类
底层是哈希表数据结构,可以存入null键null值。该集合是线程不同步的。
3.TreeMap类
底层是二叉树数据结构,线程不同步,可以给map集合中的键进行排序。
工具类:Utilities
1.Collections
集合框架静态工具类,里面都是静态方法。
2.Arrays
用于操作数组的工具类,里面都是静态方法。
注意:Arrays其中的asList()方法:将数组转成List集合。转成集合后不可以使用List集合的增加和删除方法,其它方法均可使用。另外:如果数组中的元素都是对象,用asList方法转成集合时数组中的元素就直接转成集合中的元素;如果数组中的元素都是基本数据类型,那么转换后会将数组作为集合中的元素存在。
集合转数组:
使用Collection接口中的toArray方法。
例:ArrayList<String>
al.add("abc1");
al.add("abc2");
al.add("abc3");
String[]
注意:
1.指定类型数组长度小于集合的size时此方法内部会自动创建一个新的数组,新数组长度为集合的size。当指定类型数组长度大于集合的size时不会创建。所以在指定类型数组长度时使用集合的size最好。
2.将集合转成数组一般是为了限定对元素的操作,不需要对元素进行增删时可以使用此方法。
增强for循环:JDK1.5版本以上出现的新特性。
格式:
for(
{
..........
}
例子:
ArrayList<Srting>
al.add("abc1");
al.add("abc2");
al.add("abc3");
for(String
{
System.out.println(s);
}
注意:如对集合进行遍历时只能获取集合中的元素,不能对集合进行操作;
可变参数:JDK1.5版本以上出现的新特性。
举例:public
其实就是一种数组的简写形式,不用调用方法时每次都创建数组对象了;
只要将要操作的元素作为参数传递即可。
使用时注意,可变参数定义在最后一项。如:public
---------------------- android培训、java培训、期待与您交流! ----------------------