黑马程序员——泛型、map集合及Collections工具类了解

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

泛型、map集合及Collections工具类了解

泛型:JDK1.5版本后出现的新特性,用于解决安全问题。是一个安全机制。。。。

好处:

1、将运行时期出现问题ClassCastException转移到了编译时期。方便于程序员解决问题让运行时解决问题减少,安全

2、避免了强制转换的麻烦

 

泛型格式:通过尖括号<>来定义操作的引用数据类型。

在使用Java提供的对象时,什么时候写泛型呢?

通常在集合框架中很常见。。

只要见到<>就要定义泛型

其实<>就是用来接收类型的,当使用集合时,将集合中要存储的数据类型作为参数传递到<>即可。

什么时候定义泛型类?

当类中要操作的运用数据类型不确定时,早期通过定义Object来完成扩展,现在用泛型来完成扩展。

早期Object

Class Tool;

{

private Object obj;

Public void setObj(Object obj)

{

This.obj=obj;

}

Public Object getObj()

{

Return obj;

}

}

调用时:Tool t=new Tool();

t.setObj(new Xxxx());

Xxxx x=(Xxxx)t.getObj();

 

现在泛型:

Class Tool<xxx>

{

Private xxx y;

Public void setXxx(xxx y)

{

This.y=y;

}

Public xxx getXxxx()

{

Return y;

}

}

调用时:Tool<Xxx> t=new Tool<Xxx>();

t.setXxx(new Xxx());

Xxx x=t.getXxx();

 

泛型类定义的泛型在整个类中都有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有操作的类型已经固定。为了让不同的方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。

特殊之处:静态方法不可以访问类上定义的泛型,如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。。。

泛型还可以定义在接口上。。。

 

T和?的区别:

?通配符,也可以理解为占位符:泛型的限定 ?Extends E,上限;?Super E,下限。

 

 

Map集合(接口)

基本特点:该集合存储键值对。一对一对往里存,而且要保证键的唯一性。

方法:

1、添加:put(K key,V value) 如果添加元素时,相同的键,那么后添加的值会覆盖原有键对 应的值,并put方法返回被覆盖的值

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

2、删除:clear()  remove(Object key)  

3、判断:containsKey(Object value)   containsValue(Object value)  isEmptty()

4、获取:get(Object key)  size()  Collection -values() 

 Set<Map.Entry<k,v>>entrySte() :Map集合中的映射关系存入到Set集合中,而这个关系的 数据类型就是Map.Entry

 keySet()map中所有的键存入Set集合中,因为Set具备迭代器,所以可以通过迭代方式 取出所有键值,再根据get方法,获取每个键所对应的值。。。

 

常见子类

Hashtable:底层是哈希表数据结构,不可以存入null作为建,null作为值得情况。该集合线 程是同步的。Jdk1.0,效率低。。

HashMap:底层是哈希表数据结构,允许使用nullnull值,该集合不是同步的。Jdk1.2 效率高。。

TreeMap:底层是二叉树数据结构。线程不同步,可以用于给map集合中的键值进行排序。Set很像,其实Set底层就是调用了map集合。。

Map集合的取出原理:将map集合转化为set集合,然后再使用迭代器将其取出

 

Map.Entry:获取到关系对象后,就可以通过Map.Entry中的getKeygetValue关系中的键值。Map.Entry也是一个接口,是Map内的一个内部接口。

 

 

 

 

Collections:是用于对集合操作的工具类

Set不能使用Collections里的sort方法,因为其有TreeSet

 

Collections

强制反转自然顺序 .reverseOrder()

保证线程同步 .synchronizedList()

指定置换某位置元素 .swap()

对列表位置进行随机置换 .shuffle()

 

 

 

Arrays用于操作数组的工具类,方法都是静态的

asList():将数组数组变成List集合

好处:可以使用集合的思想和方法来操作数组中的元素

注意将数组变成集合,不可以使用集合的增删方法,因为数组的长度是固定的

如果增删会出现:UnsupportedOperationException异常

 

如果数组中的元素都是对象变成集合时,,数组中的元素就直接转化成集合中的元素;

如果数组中的元素都是基本类型,那么就该数组就作为集合中的元素存在

 

集合变数组

集合Collection接口中的toArray()

1、指定类型的数组到底要定义多长?党制定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。当指定类型数组的长度大于了集合的size就不会新创建数组。而是使用传递进来的数组。所以创建一个刚刚好的数组最优。

2、为何要将集合变数组?为了限定对元素的操作。不需要进行修改了。。。

 

 

 

高级for循环

格式:for(数据类型 变量名:被遍历的集合(Collection)或数组)1.5版本以后

底层原理还是迭代器。。。。。 

只能对集合中的的元素进行取出,不能进行其它操作

迭代器除了遍历,还可以进行remove集合中元素的动作

如果使用ListIterator还可以进行增删改查的操作

 

传统for与高级for区别:高级for有局限性,必须有被遍历的目标。。

建议在遍历数组的时候还是希望使用传统for,因为其可以定义角标。。。

 

1.5版本出现的新特性:数组可变参数 public void array(int...array)

在使用方法的可变参数时,一定要定义在参数列表的最后。。。

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值