集合类
集合:1用于存储对象的容器。
2,该容器的长度是可变的。
集合和数组的区别?
1,集合长度是可变的。
数组长度是固定的。
2,集合中能存储对象。
数组中既可以存储对象,又可以存储基本类型数值。
3,集合中存储的对象可以是任意类型的。
数组中只能存储同一类型的对象。
集合框架的由来:
容器很多,因为每个容器中的数据结构是不同的。
数据结构:就是数据在容器中存储方式
如同散装鸡蛋和品牌鸡蛋的存储方式
容器虽然因为结构有不同,但是都具备着共性,可以不断地向上抽取。
就形成集合框架,该框架的顶层之一就是Collection接口
该接口定义了集合框架中最共性的功能。
最终使用的时候,其实使用的该框架最子类的对象。
Collection:方法
1,添加方法。
boolean add(object e):一次添加一个元素。
boolean addAll(Collection):将一个参数容器中的元素容器中的元素添加到当前容器中。
2,删除方法。
booleanremove(object):删除一个指定对象。
booleanremoveAll(Collection):删除指定collection中和本Collection中相同的元素。
voidclear():直接将集合中的元素清空。
3,判断方法:
booleancontains(object):是否包含指定元素。
booleancontainsAll(Conllection):是否包含指定容器中的元素。
booleanisEmpty():是否有元素。有空为真,非空为假
4,获取元素个数:
int size():获取元素有几个。
5,取交集。
booleanretainAll(Collection)保留忽然指定Collection集合中相同的元素,不相同的元素会被删除。
6,将集合转成数组。
Object[]toArray():
7,取出元素的方法。
Iteratoriterator
|--List:列表。
|--Vector:。底层是数组结构的。
|--ArrayList:底层是数组结构,也是支持长度可变数组的。
|--LinkedList:底层是链接列表结构,简称链表结构。
|--Set:列表。
|--HashSet:底层是哈希表
特点:
1,不关系元素的顺序。
2,提高了查询效率。
3,不可能出现重复元素,因为哈希值都不同。即使相同,会再次判断两个元素的equals,内容是否相同。
如果内容也相同,不存,如果内容不同,存储。
所以哈希表要保证元素的唯一性,必须要依赖于两个方法。Hashcode和Equals
|--TreeSet:底层是二叉树
迭代器:
特定写法: while(it.hasNext()){
System.out.println(it.next());
}
如何获取到集合的迭代器呢?
可以通过iterator()方法来完成。该方法返回一个itertor类型对象。
迭代器接口出现:将每一个容器中的取出凡是进行了封装,并对外暴露。
这样无论是什么容器或者数据结构,只要内部取出方式实现了iterator接口,都可以通过该接口取出这些容器中的元素。
它的出现,将容器的取出方式和容器的数据结构相分离,降低了耦合性。
而取出方式因为直接在访问容器中的元素,并依赖具体的数据结构,所以被定义在了容器中。
通过内部类来实现Iterator接口。
大型游戏中抓布娃娃的夹子,就是那个迭代器。
只要是Collection集合中的容器,迭代器是通用取出方式。
一般开发是,最常见的就是往集合存储自定义对象。
1,对自定义对象进行描述。
存储时,都被提升为了Object
取出时如果要使用自定义对象的特有方法,一定要进行向下转型。
注意事项:在迭代时,循环只要有一个next()即可。
addFirst();在最前满添加元素
addLast();在最后面添加元素
getFirst():从头部获取元素,但不删除。如果没有元素,会抛出NoSuchElementException
getLast();
removeFirst():从头部获取元素,但删除。如果没有元素,会抛出NoSuchElementException
removeLast();
list方法
1,添加:
void add(index,element);
boolean addAll(index,collection);
2,删除:
object remove(index):获取并删除。记住大家,增加或者删除方法的成功都会改变集合的长度。
3,获取:
获取元素:
Objectget(index):获取
获取元素索引:
intindexOf(object);
intlastIndexOf(object);
获取子列表:
ListsubList(fromIndex,toIndex):获取列表中的一部分,包含fromIndex位置,不包含toIndex位置。
4,修改。
objectset(index,element):替换指定位置的元素,并返回被替换掉的元素。
HashSet写法
HashSeths = new HashSet();
hs.add("nba");
TreeSet写法
TreeSetts = new TreeSet();
ts.add("haha");
LinkedHashSet.
addFirst()
addLast();
jdk1.6以后,变成。
offerFirst();
offerLast();
getFirst():获取元素,但不删除,如果列表为空,抛出异常NoSuchElementException
getLast();
jdk1.6以后。
peekFirst();获取元素,但不删除,如果列表为空,返回null。
peekLast();
removeFirst():获取元素,并会删除,如果列表为空,抛出异常NoSuchElementException
removeLast()
jdk1.6以后。
pollFirst():获取元素,并会删除,如果列表为空,返回null。
pollLast();
写法
HashSet hs = new LinkedHashSet();
hs.add("nba");
1, TreeSet两种排序方式
TreeSet ts = newTreeSet();//按照元素的自然顺序。
TreeSetts = new TreeSet(new ComparatorByName());
自然排序:就是元素自身的具备的比较性实现了Comparable接口的compareTo的方法
按照比较器:Comparator接口,覆盖compare(两个参数)
比如: ts.add(new Person("lisi1",20));
泛型
<> 符号
是一个安全机制,通配符是: ?
? extendsE: 存储元素对象的时候用,
?super E: 从容器中取出元素时使用
往容器中添加元素是上限,用?extends E
取出容器中元素是下限 用?superE.
就是不知道出现黄色波浪线是在哪里用。
foreach和传统for循环区别
简化书写。
foreach循环特点:必须明确被遍历的目标。没有目标没用。目标只能是数组或者Collection集合。
如果要对数组的中的元素进行特定操作时,建议传统for循环,通过角标完成。
格式: for(String s : al){
System.out.println(s);
}
Collecitons中常见方法
万一为多线程访问,会出现线程安全问题。
可以通过Collections中的同步集合方法,将非同步的集合,转换成同步的集合。
Collection和Collections的区别
1、collections是集合框架中的一个工具类,里面提供了操作较多的对集合进行操作的方法,比如说synchronizedList、binarySeach()等。它还可以把非同的的变成同步的,也就说把不安全的变成安全的。
2、Collection同样是集合框架中的一个工具类,单列集合、顶层接口、定义了单列集合的顶层方法、增删改查,有两个子接口list、set,这样两个子接口下面各有两个常用的子类:list有arrayList、linkedlist,set有hashSet、treeSet。(自己还可以扩展、越多越好)
1、里面的方法都是静态的。
2、没有构造函数是因为不用创建对象的。
Arrays常见方法?
binarySearch():二分查找,重载的形式,使用该方法之前必须对数组进行排序,所以说只能对有序的数组进行使用,工具类一般是不用创建对象的,直接用类名调用就可以了。
copyOf():赋值数组中的一部分。
Equals():对数组对象进行判断,是否相同。
deepEquals():深度判断,当有两个数组里面还有数组时除了判断数组里面的元素
-------------------
集合框架中的另一个顶层接口,Map。
Map:用于存储具备着对应关系的键和值。
而且要保证键的唯一性。
一次存储一对儿元素。
Collection一次存储一个元素,称之为单列集合。
Map集合一次存储一对儿元素,称之为双列集合。
Map常见方法:
1,添加。
vput(k,v):
voidputAll(map);
2,删除。
voidclear():清空集合。
vremove(key):通过键删除元素,并返回对应的值。
3,判断。
booleancontainsKey(key);
booleancontainsValue(value);
booleanisEmpty();
4,获取。
valueget(key):根据键获取值。如果键不存在,返回null。可以用来判断一个集合中是否存在某一个键。
5,获取map中所有的元素(对应关系)。
Map是不具备迭代器的,获取原理就是将map集合先转成set集合。然后在使用迭代器。
Set<key>keySet();
Set<Map.Entry<key,value>>entrySet();
Colection<value>values();获取map集合中所有的值。
----------------
Map体系:
|--Hashtable:底层是哈希表数据结构,是线程同步的,不允许null作为键,null作为值。
|--HashMap:底层是哈希表数据结构,是线程不同步的,允许null作为键,null作为值。替代了Hashtable。
|--TreeMap:可以对Map集合中的键进行指定顺序的排序,默认是使用键的自然顺序。当然也可以使用比较器。
---------------------- android培训、 java培训、期待与您交流! ----------------------