线程,集合,泛型

   

线程的停止 :

      1.停止一个线程 一般是通过一个变量来控制

      2.如果需要停止一个处于一个等待状态的线程,那么需要配合interrupture方法来完成。

 join方法  加入  : 可以在一个线程执行中,加入另外一个线程执行,前面的线程会等待加入的线程执行完毕后再执行。

 

 wait() : 等待    需要等其他线程调用notify()来唤醒

                线程会放到线程池中进行等待。

          notify() : 唤醒  随机唤醒线程池中的一个线程

          notifyAll():唤醒所有等待线程。

   

1. 泛型:jdk1.5新特性, 用来确定集合只能存放某一种数据类型对象

2. 好处: ①.将运行时的错误提前到编译时;

                     ②.避免无谓的强制类型转换。

自定义方法泛型

自定义泛型就是一个数据类型的占位或一个数据类型变量,一般是T和E来做这个占位符,占位符号是可以随意写,必须要遵守标识符的命名规范。(T和E可换成任何的,一般是一个大写的任意字母。)

  

方法泛型的格式: public <泛型的声明> 返回值类型  函数名( 泛型 变量名 ){ }

         String s = test(“a”);

public static <T>T(这里的T是返回值) test(T s){

// 函数中运用不确定类型,那么就可以使用泛型

                return s;

}

使用注意点:

  1. 泛型方法中自定义一个泛型数据的类型是在实际参数传递时被确定
  2. 泛型所用的标识符需要符合标识符的命名规范,一般习惯用大写字母表示

定义泛型类

         定义格式:  class 类名<声明自定义的泛型>{ }

 

使用注意点:1.泛型类上定义的泛型的类型是在创建这个类对象时确定;

                            2.如果一个自定义泛型类,在创建对象时没有指定类型,默认是Object类型;

                            3.静态方法不能够使用类上自定义的泛型,必须在方法上再声明自定义。

定义泛型接口

    定义方式: interface 接口名<声明自定义的泛型>{ }

使用注意点:1.接口上自定义的泛型是在实现该接口的时候被指定的;

            2.如果实现接口时没有指定类型,那么默认为Object类型

            3.需要在创建接口实现类对象时指定类型,那么需要格式

--------定义------

Map 集合接口双列集合 K:V  类似OC的字典

特点:数据存储通过键值对方式,键不允许重复,值是允许重复

常用方法

添加---- >   put(键, 值)

            map.put(“1002”,new MyBook(“java”,100));

          putAll(Map<? Extends K,? extends V> m)

            Map map2 = new HashMap();

            map.putAll(map2); //将map2的元素添加到map中

删除---- >   clear()    清空所有元素    

           remove(Object o)  通过指定的键删除元素

获取---- >   get(Object key)  用键取值

           size()           获取元素的个数

判断---- >   isEmpty()        判断map集合是否为空

           containsKey()    判断是否包含此键key

           containsValue(Object value)    判断集合是否包含该value值

 

使用注意点: 1.键可以是任意对象,值也可以是任意对象

2.Map集合中时可以嵌套list(Map)集合

Map遍历元素

方式一:keySet();  Set试图  ---> 获取所有的键用Set集合来保存 (遍历键,取值)

Set<键类型> set = map.keySet();  //map集合的key转为set集合

Iterator<> iterator = set.iterator();  // 获取set集合迭代器

while(iterator.hasNext()){         // 判断是否有元素

        String key = iterator.next();  // 获取key

        map.get(key);  // 取value

}

方式二:values();  获取Map集合中所有的值,用Collection集合来保存

Collection<value类型> coll = map.values();  //value转为collectin集合

    Iterator<value类型> it = coll.iterator();  //创建Collection迭代器

    While(it.hasNext()){     // 判断是否有元素

it.next();(返回一个value)   //获取value值,并且指针指向下一个

} //结果无序,要想有序可以先把键(set取键),先排序,然后取出东西就有序

方式三:entrySet();

//通过entrySet获取类型为Map.Entry<>的泛型

Set<Map.Entry<key类型,value类型>> entry = map.entrySet();

//创建Map.Entry<>泛型迭代器

    Iterator<Map.Entry<key类型,value类型>> it = entry.iterator();

    While(it.hasNext()){     //判断是否有元素

        // 取每个 Map.Entry<>泛型的 对象

Collections              

Collection: 接口

Collections: 集合的工具类   和Arrays(数组工具类)一样

 

Collection和Collections 的区别?

Collection是一个单列集合的根接口,Collections是操作集合的工具类

Collections常用方法:

1.对list进行二分法查找:(前提集合必须有序)

int binarySeach(list,key);    // 必须根据元素自然排序对列表进行升级排序

int binarySearch(list,key,Comparator); //要求list集合元素都是Comparable子类

  2.对list集合进行排序

     sort(list); //对list进行排序,使用的是list容器中对象的compareTo方法

     sort(list,compartor);  //按照指定比较器进行排序

  3.对集合取最大值或最小值

     max(Collection)

     max(Collection,compartor)

     min(Collection)

     min(Collection,compartor)

  4.对list集合进行反转

     reverse(list);   [1,2,3]---->[3,2,1]

  5.对比较方式进行强行逆转

     Comparator reverseOrder(); //把自然排序,逆变成反着排序的,(返回比较器)

     Comparator reverseOrder(Comparator); (指定一个比较器)返回一个比较器

  6.对list集合中的元素进行位置的替换

     swap(list,x,y);

7.对list集合进行元素的替换,如果被替换的元素不存在,那么原集合不变

     replaceAll(list,old,new) // 对某个list的值,换个新值

  8.可以将不同步的集合变成同步的集合

     Set synchronizedMap(Set<T> s)

     Map synchronizedMap(Map<k,v> m)

     List synchronizedList(List<T> list)

  9.集合变数组

     可以使用Collection 中的toArray方法。

注意:是Collection不是Collectins工具类,传入指定的类型数组,该数组的长度最好为集合的size.

原文地址:https://www.cnblogs.com/Xu-songsong/p/6134767.html