集合框架(用到集合类 首先要导包) 
   面向对象语言对事物的体现都是以对象形式,所以为了方便对多个对象的操作 
   就对对象进行存储,集合就是存储对象最常用的一种方式。 
数组和集合类同事容器的区别。 
   数组虽然可以存储对象,但长度是固定的集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。 
集合类的特点: 
   集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象 
 
集合框架的构成和分类 
 
 Collection 
             List  
                    ArrayList 
                    LinkedList 
                    Vector 
             Set  
                    HashSet 
                    TreeSet 
 
集合和对象都存的是地址 
 
add方法的参数类型是Object,以便于接收任意类型对象 
集合中存储的都是对象的引用(地址) 
 
添加元素: 
      x.add("aa"); 
删除元素: 
      x.remove("aa"); 
      x.vlear();清空集合 
判断元素: 
      x.contains("aa"); 是否存在该元素 
      x.isEmpty();元素是否为空 
      x.size();元素和数 
交集: 
      x.retainAll(y);x集合和y集合都拥有 
 
迭代器: 
     就是集合的取出元素的方式。 
就是把取出方式定义在集合内部 
这样取出方式就可以直接访问集合内容的元素 
那么取出方式就被定义成了内部类 
而每一个容易的数据结构不同 
所取出的动作细节也不一样,但是都有共性内容判断和取出,那么可以将写共性抽取 
         Iterator  接口 
那么这些内部类都符合一个规则,该规则是Iterater. 
 
Collection 
    List  元素是有序的,元素可以重复,因为该集合体系有索引 
    Set 元素是无序,元素不可以重复 
 
List:特有方法:凡是可以操作角标的方法都是该体系特有的方法 
 
增:add(index,element) 
    addAll(index,collection) 
删: 
    remove(index) 
改: 
    set(index,element); 
查: 
    get(index) 
    subList(from,to) 
    ListIterator(); 
 
List集合特有的迭代器,ListIterator是Iterator的子接口 
在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生异常 
所以在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的 
只能对元素进行判断,取出,删除操作。 
如果想要其他的操作如添加,修改等。就需要使用其子接口。(ListIterator) 
该接口只能通过List集合的ListIterator方法获取 
ListIterator元素都有角标 
 
List:常见的三个子类对象 
 
ArrayList 底层的数据结构使用的是数组结构 (查询速度快,但增删稍慢)(线程不同步) 
LinkedList 底层是链表数据结构(增删速度快,查询慢)(线程同步) 
Vector 底层是数组数据结构,被Array替代(增删慢,查询慢) 
 
 
Vector: 
枚举就是Vector的特有取出方式。和迭代器的方法一样,因为名称过长,被迭代器取代。 
 
LinkedList特有方法 
addFirst() 增加到头部 
addLast()  增加到尾部 
getFirst() 取头不删 
getLast()  取尾不删 
removeFirst() 取头删除 
removeLast()取尾删除 
如果集合中没有元素会出现异常 
 
 
Set:元素是无序的,元素不可以重复(存入和取出的顺序不一定一致。) 
HashSet:数据结构是哈希表,线程是非同步的 
         保证元素唯一性原理,判断元素的HashCode值是否相同 
         如果相同,还会继续判断元素的equals方法,是否为true 
TreeSet 可以对Set集中的元素进行排序。(底层元素唯一的依据) 
        底层数据结构是二叉树 
TreeSet 排序的第一种方式:让元素自身具备比较性。(元素需要实现Comparable接口) 
        这种方式也称为元素的自然顺序,或者叫做默认顺序 
TreeSet 的第二种排序方法 
        当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性,在集合初始化时,就有了比较方式 
        这时需要让容器自身具备比较性,定义了比较器,将比较器对象作为参数传递。 
 
当两种排序都存在时,以比较器为主 
 
 
泛型:用于解决安全问题,是一种安全机制 
好处:将运行时期出现问题classCastException转移到了编译时期 
      方便于程序员,解决问题,让运行时期问题减少 
      避免了强制转换的麻烦 
泛型的格式:通过<>来定义要操作的引用数据类型 
 
使用泛型: 
     当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可 
定义泛型类 
     当类中要操作的引用数据类型不确定的时候早起定义object来完成扩展 
     现在定义泛型来完成扩展 
泛型方法 
     泛型类定义的泛型,在整个类中有效,如果被方法使用。 
     那么泛型类的对象明确要操作的具体类型后,所以要操作的类型就已经固定了。 
     为了让不同方法可以操作不同类型而且类型还不确定:那么可以就爱那个泛型定义在方法上 
 
静态泛型 
     静态方法不可以访问类上定义的泛型 
     如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。 
 
 
Map:该集合存储值对,一对一对往里存。而且要保证数据的唯一性 
 
添加: put(k key,v value)  
       putAll() 
删除   clear() 
       remove(object key) 
判断   containsValue(object Value) 
       containskey(object key) 
获取   get(object key) 
       size() 
       values() 
       entrySet() 
       keySet() 
 
Map子类的特点(和Set很像,Set底层用的Map集合) 
      Hashtable 底层是哈希表数据结构,不可以存储null键,null值,该集合是线程同步的 
      HashMap   底层是哈希表数据结构,继续是用null值和null键该集合是不同步的 
      TreeMap   底层是二叉树数据结构,线程不同步,可以用于给map集合中键进行排序 
 
 
Map-keySet 
    map集合的两种取出方式 
1.keySet:将map中所有的键存入到Set集合,因为Set具备迭代器 
          所有可以迭代当时取出所有的键,在根据get方法,获取每一个键对          应的值 
          map集合的取出原理,将map集合转成set集合,在通过迭代器取出。 
 
Map-entrySet:将map集合中的映射关系存入到了Set集合中 
              而这个关系的数据类型就是Map.Entry 
 
 
Map扩展:被使用是因为具备映射关系。 
 
 
数组变集合: 
   Arrays:用于操作数组的工具类,里面都是静态方法 
 
asList:将数组变成List集合 
好处:可以用集合的思想和方法来操作数组中的元素。 
注意:将数组变集合,不可以使用集合的增删方法,因为数组的长度是固定的 
 
 
集合变数组: 
Collection接口中的toArray方法 
  当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的  数组,长度为集合的size 
  当指定类型的数组长度大于了集合的size,就不会新创建了数组,而是使用  传递来的数组,所以创建一个刚刚好的数组最优。 
集合变数组的好处:限定对元素的操作,不需要进行增删了 
 
增强for循环 
       格式:for(数据类型 变量名:被遍历的集合式数组){} 
对集合进行遍历:只能获取集合元素,但不能对集合进行操作 
               迭代器除了遍历,还可以进行remove集合中元素的动作,如               果使用ListIterator,还可以在遍历过程中进行增删改查的               动作。 
传统for和增强for的区别 
    高级for有一个局限性,必须有被遍历的目标 
建议:在遍历数组的时候,还是希望使用传统for因为传统for可以定义角标。 
 
 
Runntime对象 
该类并没有提供构造函数 
说明不可以new对象,那么会直接想到该类中的方法都是静态的 
发现该类中还有非静态方法 
说明了该类肯定会提供了方法获取本类对象,而且该方法是静态的,并返回值类型是本类类型。 
该方法是:staicRunntime.getRunntime() 
(由这个特点可以看出该类使用了单例设计模式) 
  destroy() 杀掉子进程。 
 
Math.Random  
Math.Cell方法:返回最大于指定数据的最小整数。 
Math.floor:返回小于指定数据的最小整数 
Math.round 四舍五入 
Math.random  返回0和1之间的随机数(和nextInt(10)相同) |   
        
 
    
    
    
     
 
 |