------- android培训、java培训、期待与您交流! ----------
Collection 接口
定义该接口的共性方法:
add(obj);
addAll(col);
size(); isEmpty();
clear();清空容器
equals(obj);
boolean retainAll(collection);保留与指定集合相同的元素
contains(obj);是否包含obj //---containsAll(collection);
Object[] toArray();转换为数组,泛型方法
boolean remove(obj);移除指定元素
boolean removeAll(collection);移除相同的元素
iterator();返回Iterator接口的一个实例;
1、List 接口(特有方法:可以操作角标)有顺序可以重复
add(index ,element);指定位置增加元素
addAll(index,col),指定位置增加集合
remove(index);删除指定位置 //---remove(obj);移除指定元素collection接口方法
set(index,element);指定位置修改为指定元素
get(index);获取指定位置
subList(from,to);返回一个子list
indexOf(obj);获取对象第一次出现的位置 lastIndexOf(obj)
ListIterator listIterator();列表迭代器 Iterator的子接口
|---add(obj);在next后插入元素
|---set(obj);将next或者previous返回的元素修改为指定元素
|---hasPrevious();用来逆向遍历,是否有上一个元素
|---previous();返回上一个元素
1.1 ArrayList
底层数据结构是数组;
特点:查询速度快,插入和删除慢;线程不同步,效率高;
ArrayList(int initialCapacity) 构造一个具有指定初始容量的空列表。
trimToSize();
ensureCapacity(int minCapacity);如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
默认动态Object[]数组大小为10;
在迭代时,循环中next取一次,就用hasNext判断一次
1.2 LinkedList
底层数据结构是链表;
特点:增删速度快,查询稍慢
addFirst();
addLast();添加元素
getFirst();
getLast();获取元素
removeFirst();获取并删除第一个元素,
removeLast();
|---JDK1.6升级:
poll();获取并移除此列表的头 //---remove();
pollFirst(); //---removeFirst();
pollLast();获取并移除元素,如果为空,返回Null. //---removeLast();
offer(e);将指定元素添加到此列表的末尾. //---add();
offerFirst(); //---addFirst();
offerLast();指定元素插入头或尾,返回true或者false //---addLast();
peek();获取但不移除此列表的头 //---get(0);
peekFirst(); 获取但不移除此列表的头 //---getFirst();
peekLast();获取元素,相当远get,如果列表为空,返回null //---getLast();
pop();出栈,移除并返回此列表的第一个元素//---removeFirst();
push();压栈,将该元素插入此列表的开头//---addFirst();
如果列表为空:
get(),remove()抛出异常
peek(),poll()返回null
1.3 Vector
底层是数组数据结构,是同步的,效率较低;超过初始长度10,延长一倍,浪费空间;
子类
|---Stack栈功能
Enumeration elements();返回枚举类型,和迭代功能相像。被Iterator取代
2、Set接口---无序,不重复
方法和Collection一样
不允许包含相同的元素,add(obj)--->如果equals(obj);返回true,则obj添加失败;
2.1 HashSet
底层数据结构是哈希表
方法和Collectio一样,集合元素值可以是null;
判断两个元素是否相同、某个元素是否存在、删除某个元素、通过元素自身的hashCode()和equals()方法;如果两个元素hashCode值相同,则在调用equals方法;
|---LinkedHashSet 可以保证元素按照添加顺序保存
2.2 TreeSet
底层的数据结构:二叉树(红黑树)根据compareTo方法返回的结果可以实现元素的不同排序;
想TreeSet中添加元素时,只有第一个元素不需要事先Comparable接口.
元素需要有比较性,实现Compareable接口,并且重写compareTo方法(自然排序),
否则,抛出非本类对象异常。
排序时,当主要条件相同时,一定要判断次要条件。
TreeSet排序两种方式:
第一种方式:元素实现Compareable接口,覆盖compareTo方法
第二种方式:元素自身不具备比较性,或者具备不需要的,这时需要让集合初始化时具备比较性。
定义一个类,实现Comparator接口,覆盖compare方法;
当两种方式都存在时,以比较器为主;
方法:
Comparator comparator();返回定制比较器;如果采用自然排序,返回null;
Object first();
Object last();返回最后一个元素;
Object lower(obj);返回小于obj的最大元素;
Object higher(obj);返回大于obj的最小元素;
2.3 EnumSet枚举集合类
内部为位向量的形式存储,特点是高效。
通过静态方法返回EnumSet对象。
Map 集合:
Map<K,V> 该集合存储键值对,并且保证键的唯一性
1、添加:put(K key,V value); 返回该键所对应的原来的值 putAll(Map);
2、删除:clear(); remove(Object key);
3、获取:get(Object key); 可以通过get的返回值判断一个键是否存在
size();
Collection values();返回该Map的value集合
Map集合的两种取出方式:(将Map集合转成Set集合,在通过迭代器取出对应的值)
<1> Set<Map.Entry<k,v>> entrySet():将key-value对存入到Set中,返回Map.Entry 类型的对象;;可以通过迭代器取出
Map.Entry是一个内部接口,
方法:getKey(),getValue(), equals(),hashCode(),setValue()
Entry是Map接口的内部接口
<2> Set<T> keySet():将Map中key存入到Set集合;
因为Set具备迭代器,所以可以迭代方式取出所有的key,在使用get(key)方法获取value。
4、判断:containsValue(Object value);
containsKey(Object key);
isEmpty();
一、Hashtable:底层是哈希表数据结构,不可存入null作为键或值的情况;该集合线程同步;
|---Properties属性类
方法:String getProperty(String key);获取key对应的值
String getProperty(key,value);获取key对应的值,如果没有key,则设置key-value值
String setProperty(key,value);设置key-value值
void load(InputStream is);从is中以追加方式加载key-value对;
void store(OutputStream os,String comments);将Properties中的key-value存入os中;
二、HashMap:底层是哈希表数据结构,并允许实现null键null值;该集合是不同步的; (JDK1.2)
|---LinkedHashMap类
三、TreeMap:底层是二叉树数据结构,线层不同步。可以用于给Map集合中的键进行排序;
方法:
Map.Entry firstEntry();--->firstKey();
tail...head
lower...higher
四、EnumMap:
不允许使用null作为key,但可以作为value;
和Set很像,其实Set集合底层使用了Map集合。
Collections工具类:
sort(list,comparator);给list排序,比较器Comparator;--->sort(list);自然顺序
binarySearch(list,obj);二分法查找obj在有序的list中的索引
fill(list,obj);使用obj替换list中所有元素;
replaceAll(list,old,new);使用new替换list中的old元素;
reverse(list);反转
swap(list ,ni,n2);交换list中的n1和n2位置
reverseOrder()返回比较器对象,强行逆转实现了comparable接口的对象collection集合的自然顺序
shuffle(list);对list随机排序,洗牌
rotate(list,distance);distance为正数,将后distance个元素移到list前;为负数,将前distance个元素移到list后面。
frequency(collection,obj);返回obj在collection出现的次数;
max(collection);
max(collection,comparator);
min(collection);
min(collection,comparator);
synchronizedXxx(? implents Xxx);
Xxx可以是Collection Map Set List,获得Xxx的一个同步对象。
Arrays工具类
asList(T... arr)
将数组转成固定长度的List集合,可以使用集合的思想操作数组中的元素。但是不可以使用集合的增删方法,因为数组长度是固定的。
如果数组中的元素是对象,转成数组后,这成为集合中的元素。
如果数组中的元素是基本数据类型,那么转成数组后,该数组作为集合中的元素存在。
Collection接口中的toArray(); <T> T[] toArray(T[] a);
1、指定类型的数组定义多长?
当数组a长度小于集合的size,该方法内部会创建一个新的数组长度为size的数组:T[size];
当数组a长度大于集合的size,使用该数组长度。list.size 指定长度,后面为null;
2、为什么要集合变数组?
是为了限定对元素的操作。
增强for循环:
方便对集合(Collection)或者数组遍历操作,但是不可以有增删修改操作;
是迭代器的简化,有局限性;
可变参数
show(int... arr)
{
sop(arr.length);
}
将操作的元素作为参数传递即可,隐式的将参数封装成了数组。
使用时可变参数一定要定义在参数列表的最后面。
------- android培训、 java培训、期待与您交流! ----------