您的位置:首页 > 职场人生

黑马程序员——Java集合工具类和泛型

2014-05-15 15:41 435 查看
android培训、java培训、期待与您交流!
Collections工具类和泛型
Collections和Collection
Collections和Collection是不同的,Collections是工具类,用来操作集合的,而Collection是集合接口。Collections中有一系列的静态方法用来操作集合,但是不能更改集合内容。比如不能set()不能remove()元素,可以替换全部元素或者添加同一个元素。

[align=left]static List<String> list =Arrays .asList("one Two three Four five six one".split( " "));//Two 和Four有意为之~[/align]
[align=left] public static void main (String[] args) {[/align]
[align=left] // TODO Auto-generated method stub[/align]
[align=left]System.out .println (list) ;[/align]
[align=left]System.out .println ("max="+ Collections. max( list));[/align]
[align=left]System.out .println ("min="+ Collections. min( list));[/align]
[align=left]System.out .println ("忽略大小写max="+ Collections. max([/align]
[align=left] list, String. CASE_INSENSITIVE_ORDER));[/align]
[align=left]System.out .println ("忽略大小写min="+ Collections. min([/align]
[align=left] list, String. CASE_INSENSITIVE_ORDER));[/align]
[align=left] [/align]
[align=left]List<String > sublist =Arrays .asList("Four five six" .split (" ")) ;[/align]
[align=left]System.out .println ("indexOfSublist=="+[/align]
[align=left] Collections .indexOfSubList(list , sublist ));[/align]
[align=left]System.out .println ("lastIndexOfSubList=="+[/align]
[align=left] Collections .lastIndexOfSubList (list, sublist)) ;[/align]
[align=left] Collections .replaceAll(list , "one", "YO") ;[/align]
[align=left] [/align]
[align=left] System .out.println( "replace"+list );[/align]
[align=left] Collections .reverse(list );[/align]
[align=left]System.out .println ("resever"+ list);[/align]
[align=left] Collections .shuffle(list ,new Random(47 ));[/align]
[align=left]System.out .println ("shuffle"+ ""+list) ;[/align]
[align=left] [/align]
[align=left]List<String > source =Arrays .asList("dong ting lake" .split (" ")) ;[/align]
[align=left] Collections .copy(list , source );[/align]
[align=left]System.out .println ("copy"+ ""+list) ;[/align]
[align=left] Collections .fill(list , "pop");[/align]
[align=left]System.out .println ("fill"+ ""+list) ;[/align]
[align=left]System.out .println ("frequency"+[/align]
[align=left] Collections .frequency(list , "pop"));[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]}[/align]
[align=left]/*[one, Two, three, Four, five, six, one][/align]
[align=left]max=three[/align]
[align=left]min=Four[/align]
[align=left]忽略大小写max=Two[/align]
[align=left]忽略大小写 min=five[/align]
[align=left]indexOfSublist==3[/align]
[align=left]lastIndexOfSubList==3[/align]
[align=left]replace[YO, Two, three, Four, five, six, YO][/align]
[align=left]resever[YO, six, five, Four, three, Two, YO][/align]
[align=left]shuffle[three, five, six, YO, Four, Two, YO][/align]
[align=left]copy[dong, ting, lake, YO, Four, Two, YO][/align]
[align=left]fill[pop, pop, pop, pop, pop, pop, pop][/align]
[align=left]frequency7*/[/align]
[align=left] [/align]
泛型

泛型应用在泛型接口,泛型类和泛型方法中,主要作用是使参数类型化,将运行时参数不匹配错误转移到编译时期,避免强制类型转换。
泛型接口比较好理解,就是说这个接口的实现类有许多的类型,再写这个类的时候,并不知道会有什么类型的类来实现这个接口。

[align=left]interface Solution< T> {[/align]
[align=left] public void say ();[/align]
[align=left]}[/align]
[align=left]实现这个接口的类可以是泛型的,也可以是具体类型的,比如下面这个类是具体类型的,String。[/align]

[align=left]class GenericTest implements Solution< String> {[/align]
[align=left] [/align]
[align=left] public static void main ( String[] args ) {[/align]
[align=left]Solution <String > gt = new GenericTest ();[/align]
[align=left]实现这个接口的类依然是泛型的类。[/align]

[align=left]class GenericTest< T> implements Solution <T >{[/align]
[align=left] [/align]
[align=left] public static void main ( String[] args ) {[/align]
[align=left]Solution <String > gt = new GenericTest <String >() ;[/align]
[align=left]Solution <Integer > ss= new GenericTest <Integer >() ;[/align]
[align=left]泛型类和泛型方法[/align]

[align=left]//泛型类[/align]
[align=left]class Solution3< V, T> {[/align]
[align=left] //利用泛型的构造函数[/align]
[align=left] public Solution3( V name, T other ) {[/align]
[align=left] super ();[/align]
[align=left] this. name = name;[/align]
[align=left] this. other = other;[/align]
[align=left] }[/align]
[align=left] public V getName() {[/align]
[align=left] return name ;[/align]
[align=left] }[/align]
[align=left] public void setName (V name ) {[/align]
[align=left] this. name = name;[/align]
[align=left] }[/align]
[align=left] public T getOther() {[/align]
[align=left] return other ;[/align]
[align=left] }[/align]
[align=left] public void setOther (T other ) {[/align]
[align=left] this. other = other;[/align]
[align=left] }[/align]
[align=left] V name;[/align]
[align=left] T other;[/align]
[align=left]}[/align]
[align=left]public class GenericC {[/align]
[align=left] [/align]
[align=left] public static void main ( String[] args ) {[/align]
[align=left] //由于这个类的构造方法用到了泛型,那么我们可以在泛型范围内[/align]
[align=left] //使用不同的类型来构造对象,没有使用泛型之前你可能无法这么做[/align]
[align=left] //String,String类型的构造函数[/align]
[align=left]Solution3 <String ,String > ss = new Solution3 <String , String >( "方案" , "目标" );[/align]
[align=left] //String,integer类型的构造函数[/align]
[align=left]Solution3 <String ,Integer > si = new Solution3 <String , Integer >( "方案" , 3 );[/align]
[align=left]System .out .println ( "String+Sting"+ ss. getName ()+ ss. other) ;[/align]
[align=left]System .out .println ( "String+Integer"+ si. getName ()+ si. other) ;[/align]
[align=left]/*String+Sting方案目标[/align]
[align=left]String+Integer方案3*/[/align]

使用通配符
通配符"?"
[align=left]class Jiangyou{[/align]
[align=left]}[/align]
[align=left]class Solution5< T> {[/align]
[align=left] T t;[/align]
[align=left] public Solution5( T t ) {[/align]
[align=left] super ();[/align]
[align=left] this. t = t;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]public class GenericD {[/align]
[align=left] //一个使用了泛型类的对象的方法,将泛型对象定义为通配符“?”[/align]
[align=left]public static void function ( Solution5<?> so ){[/align]
[align=left] System . out. println( "方案: " +so .t );[/align]
[align=left]}[/align]
[align=left] public static void main ( String[] args ) {[/align]
[align=left] //通配符"?"的权限很大[/align]
[align=left] Solution5 <String > so5 = new Solution5 <String >( "目标" );[/align]
[align=left] //可以是Number基本数据类型[/align]
[align=left] Solution5 <Number > so7 = new Solution5 <Number >( 6 );[/align]
[align=left] //甚至是Object,这里用了个酱油类[/align]
[align=left] Solution5 <Jiangyou > so6 = new Solution5 <Jiangyou >( new Jiangyou()) ; [/align]
[align=left] function( so5 );[/align]
[align=left] function( so6 );[/align]
[align=left] function( so7 );[/align]
[align=left]/* 方案: 目标[/align]
[align=left] 方案: Jiangyou@4e515669[/align]
[align=left] 方案: 6*/[/align]
[align=left]上限限定[/align]

[align=left] //一个使用了泛型类的对象的方法,将泛型类型上限定为Number的类型[/align]
[align=left]public static void function ( Solution5<? extends Number> so ){[/align]
[align=left] System . out. println( "方案: " +so .t );[/align]
[align=left]}[/align]
[align=left] public static void main ( String[] args ) {[/align]
[align=left] //Number及其子类都可以调用function方法[/align]
[align=left] Solution5 <Integer > solution = new Solution5 <Integer >( 3 );[/align]
[align=left] Solution5 <Double > solution1 = new Solution5 <Double >( 3. 0 ); [/align]
[align=left] //String类型的Solution无法调用function方法[/align]
[align=left] Solution5 <String > solution2= new Solution5< String> ("mubiao" ); [/align]
[align=left] function( solution );[/align]
[align=left] function( solution1 );[/align]
[align=left]/* 方案: 3[/align]
[align=left] 方案: 3.0*/[/align]

下限限定
[align=left]//一个使用了泛型类的对象的方法,将泛型类型下限定为Integer的类型[/align]
[align=left]public static void function ( Solution5<? super Integer> so ){[/align]
[align=left] System . out. println( "方案: " +so .t );[/align]
[align=left]}[/align]
[align=left] public static void main ( String[] args ) {[/align]
[align=left] //Integer及其父类都可以调用function方法[/align]
[align=left] Solution5 <Integer > solution = new Solution5 <Integer >( 3 );[/align]
[align=left] //Double不是Integer的父类无法调用function方法[/align]
[align=left] Solution5 <Double > solution1= new Solution5< Double> (3 .0 ); [/align]
[align=left] //Object类型的Solution调用function方法[/align]
[align=left] Solution5 <Object > solution2 = new Solution5 <Object >( "mubiao" ); [/align]
[align=left] function( solution );[/align]
[align=left] //function(solution1);[/align]
[align=left] function( solution2 );[/align]
[align=left]/* 方案: 3[/align]
[align=left] 方案: mubiao*/[/align]
[align=left]           android培训、java培训、期待与您交流! [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐