黑马程序员------java学习笔记之集合

 ------- android培训java培训、期待与您交流! ----------

1.概述

       1.集合框架:

              集合用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

              Collection

                     |----  List:元素有序,可以重复                         

                            |---- ArrayList:底层的数据结构使用的是数组结构。特点:查询,修改速度快,增删慢。

                            |----  LinkedList:底层的数据结构是链表结构。特点:查询,修改慢,增删快。

                            |----  Vector底层是数组数据结构。线程同步,被ArrayList替代。(特有取出方式:Enumeration枚举)

                     |----    Set: 元素无序,不可重复

                            |----  HashSet底层数据结构是哈希表

                            |-----  TreeSet  底层结构是二叉树,可以对Set集合中的元素进行排序

              每个容器对数据的存储方式都不同,即数据结构不同。

       2.集合共性方法:

              add()方法的参数类型是Object,以便于接收任意类型的对象。集合存储的都是对象的引用(地址)。

              remove()       删除元素并返回。

              clear()    删除所有元素。

              contains()       判断是否包含指定字符串。

              isEmpty()  判断集合是否为空,为空返回true

              retainAll()   取交集,保留与指定的集合相同的元素

              removeAll()  去掉与指定集合相同的元素

       3.迭代器:iterator  集合的取出元素的方式。不可以通过集合对象的方法操作集合中的元素,只能进行判断,取出,删除。添加,修改需要其子接口ListIterator()中的listIterator()方法。

2.List元素师有序的,元素可以重复。判断元素是否相同,依据元素的equals方法。

       1.共性方法:add(index, element)           指定位置添加元素 

                            addAll(index,Collection)           添加指定集合中所有元素到结尾

                            remove(index)                         删除指定位置元素

                            set(index,element)                   修改指定位置元素

                            get(index)                                获取指定位置元素

                            subList(from,to)                返回指定位置的的List,包含头不含尾。

                            ListIterator()                       List特有迭代器,元素进行添加,修改,判断,取出,删除的操作。

       2.LinkedList:

                                                                      (6.0JDK替代方法)

       特有方法:addFirst():   头部添加元素                 offerFirst ()                 

                      addLast():    尾部添加元素               offerLast()

                       getFirst():       获取头部元素                  peekFirst()

                      getLast():   获取尾部元素                  peekLat()

                      removeFirst(): 获取并删除头部元素     pollFirst()

                      removeLast():  获取并删除尾部元素, pollLast()

      特有迭代器:ListItertor.

3.HashSet功能和Collection相同。

              保证元素唯一性的方式是通过元素的两个方法hashcodeequals来完成,元素的hashcode相同才会去判断equals是否  true,元素的hashcode值不同,不会调用equals

              判断元素是否存在,以及删除等操作,依赖的方法时元素的hashcodeequals方法。

4.TreeSet 

              保证元素唯一性的依据是compareTo方法return 0.

              TrerSet排序的第一种方式:让元素自身据别比较性,元素需要实现Comparable接口,覆盖compareTo方法,不覆盖是   默认顺序。

              TreeSet的第二种排序方式:当元素不具备比较性时,或具备的比较性不是所需要,这时需要让集合自身具备比较性。

              定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

5.泛型:用于解决安全问题,是一个安全机制。允许在定义类,接口,方法时使用类型形参,这个类型形参将在声明变量,      创建       对象、调用方法时动态地指定。

       1.好处:1将运行时期出现的问题ClassCastException,转移到了编译时期,方便程序员解决问题,让运行时期问题减      少,              安全。2.避免强制转换。

       2.泛型格式:通过<>来定义要操作的引用数据类型。例:List<String> strList = new ArrayList<String>();

       3.泛型类:class Test<T>   当类中要操作的引用数据类型不确定时可以定义泛型类。在整个类中有效。被方法使用,泛                  型类对象明确要操作的具体类型后,所有操作的类型就固定。

       4.泛型方法:让不同方法可以操作不同类型,类型不确定时可以定义泛型方法。

       5。泛型接口:interface Inter<T>  {void show(T t)}

       6.泛型限定:通配符:? 

              ?extends E:可以接受E类型或者E类型的子类型(上限)。

              ?super E:可以接受E类型或者E的父类型(下限)。

             

6.Map存储键值对。一对一对的存,而且要保证键的唯一

Hashtable:底层是哈希表数据结构,不可存入null键null值。该集合是线程同步,jdk1.0效率低。

HashMap:底层是哈希表数据结构,允许使用null键(唯一)和null值,线程不同步,jdk1.2效率高,取代Hashtable

TreeMap:底层是二叉树数据结构,线程不同步,可以用于Map集合中的键进行排序。

       1.操作方法:put (K key, V value) ;   putAll(Map<?extends K, ? extend V> m)          添加

                      clear();        remove(Objectkey)                                             删除      

                      containsValue(Object value);          containsKey(Object key); isEmpty();           判断

                      get(Object key);       size();    values();      entrySet();   keySet()              获取

       2.两种取出方式:

                     1.Set<k> keySet: map中所有的键存入到Set集合。通过迭代器方式取出所有的键,根据键取值。

Map<String ,String> map = new HashMap<String, String>();

map.put("02","zdfsd");  ...........

Set<String> keySet = map.keySet();

Iterator<String> it = keySet.iterator();

while(it.hasNext()){String key = it.next(); String value = map.get(key);}

                     2.Set<Map.Entry<k,v>>entrySet: map中的映射关系存入到set集合,可以取出键和值。

Set<Map.Entry<String, String>> entrySet = map.entrySet();

Iterator<Map<String, String>> it = entrySet.iterator();

while(it.hasNext()){

Map.Entry<String, String> me = it.next();  

String key = me.getKey(); 

String value = me.getValue();

}

7.Collections:对集合进行操作的工具类。  全是静态方法。

       1.static voidsort(List list):   根据元素的自然顺序对指定的List集合的元素按升序进行排序。

       2.staticObject max(Collection coll): 根据元素的自然顺序,返回给指定集合中的最大元素。

       3.static int binarySearch(List list, Object key): 二分搜索指定的集合,获得指定对象的索引。

       4.static voidrevers(List list): 反转指定List集合中的元素的顺序。

       5.同步控制   

              提供了synchronizedXxx()方法,该方法可以将指定集合包装成线程同步的集合,从而解决多线程并发访问集合时的线程   安全问题。

       6.设置不可变集合。

              emptyXxx():返回空的、不可变的集合对象。

              singletonXxx():返回只包含指定的,不可变的集合对象。

              unmodifiableXxx(): 返回指定集合对象的不可变视图。

8.Arrays:操作数组的工具类。

将数组变成集合,用集合的思想和方法操作数组中的元素。不可以使用集合中的增删操作,否则出现U你supportOperationException。如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

String[] arr = {"fa", "fff"};

List<String>  list = Arrays.asList(arr);

9.集合转成数组:限定对元素的操作。
Collection接口中的toArray方法。
String[] arr = al.toArray(new String[al.size()]);
10.增强for循环:
1.格式:for(数据类型 变量名 : 被遍历的集合(Collection)或者数组){} //集合必须是实现了Iterable。
11.可变参数:定义在参数的最后面
格式:数据类型 ... 变量名
12.静态导入:
import static 语句导入一个类中的某个静态方法或者所有静态方法。
当类名重名时,需要指定具体的包名。当方法重名是,指定具备所属的对象或者类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值