黑马程序员_集合总结

时间:2020-12-29 18:35:10
---------------------- android培训java培训、期待与您交流! ----------------------

黑马程序员_集合总结

集合类

 

集合: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中的同步集合方法,将非同步的集合,转换成同步的集合。

CollectionCollections的区别

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培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima