Java学习笔记(七)集合,泛型,工具类,BigDecimal

、集合简介

集合与数组的区别:集合的长度能变,数组的长度不能改变

Collection集合:每一个元素存储一条信息,即一个值

Map集合:每个元素存储两条信息,即一个键值对

二、Collection集合

1、Collection接口

add-增加元素,remove-删除元素,size-集合大小,isEmpty-判断集合是否为空

clear-清空集合,contains-判断集合中是否包含指定的元素,iterator迭代器

2、Collection集合分类:

List集合:有序集合,有下标,能存储相同的元素

Set集合:无序集合,不能存储相同的元素

3、List集合

get,返回列表中指定位置元素

set ,替换指定位置元素

remove-可按照索引删除

ArrayList:采用数组结构存储元素,增删改慢,查询快,线程不安全,效率高

Vector:数组存储结构,增删改慢,查询快,线程安全,效率较低

linkedList:采用链表结构存储数据,增删改快,查询慢,线程不安全,效率高

4、Arraylist使用

(1)向上转型创建对象:首先使用list中的方法,若方法在arraylist中被重写,调用重写后的方法

List list=new ArrayList();

(2)使用方法

list.add(),-- 添加集合元素,list .size。。。。

(3)遍历方法

通过下标遍历,增强for,迭代器,使用Lamda

迭代器:

hasNext:判断指针位置是否有下一个元素

next:指针下移,取出指针位置的元素并返回

remove:删除指针指向的元素

5、Set集合

不能存储重复的元素,可以使用Set去重

HashSet:

向hashset中存放对象时,hashset会调用对象的hashcode方法得到该对象的

hash码,然后根据hash码来确定该元素的存储位置。

TreeSet:

集合处于排序状态,TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,

或者通过CompareTo方法比较没有返回0

LinkedHashSet

LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,

但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的;

去重原理:

两个元素先调用hashcode比较,hashcode会返回一个值,若返回的值相同再使用equals比较,

若相同则表示这两个元素相同,不能插入set集合中

利用这个原理,如果是自己创建的类,需要自己重写,

可以自己重写hashcode,修改返回的值,比如返回调用对象的属性值,

不修改,返回的是这个对象的hash码;

重写equals,修改比较的内容,不修改,比较的对象的首地址

遍历方法

增强for,迭代器,使用Lamda

6、Map集合

存储元素是一个键值对,键是唯一的,值可以重复

方法

put-- 添加元素,get-- 返回指定键对应的值

remove-- 通过指定键删除键值对,clear-- 清理map集合

size-- map集合长度,isEmpty–判断集合是否为空

containsKey,containsvalue ,-- 判断集合是否包含指定键或者值

KeySet,-- map集合中所有键组成的set集合,刚好去重

values , --所有值,entrySet – 返回map集合中所有元素

实现类:

HashMap:

(1)无序且不安全的数据结构

(2)向Map集合中添加元素若键相同,会覆盖原来的键值对,而在Set集合中不会覆盖而是不能添加

(3)hashmap能通过键找到值,而hashset只能通过遍历找

存储原理:

获取到传入的key值,计算对应的hash值,然后计算出对应的存储位置(数组下标),把传入的key

与value值存到该数组对应下标的数组中;

数据存储在长度为默认长度为16的数组中,当传入数组的下标相同,就会存储到该下标下默认长度为8

的链表中,若大于等于8,则会将链表变成红黑树存储数据;

HashTable:

实现一个哈希表,该哈希表将键映射到相应的值,任何非 null 对象都可以用作键或值,

即不允许null键null值,除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同

TreeMap:基于红黑树实现。

HashMap:适用于在Map中插入、删除和定位元素,通常比TreeMap快一点,

在需要排序的Map时候才用TreeMap,仅在需要完全的线程安全的时候使用Hashtable。

遍历方法

(1)使用Keyset方法得到键的集合,遍历这个键集合,使用get得到对应的值

(2)使用entrySet方法得到键值对的集合,每个键值对使用Map.Entry类型存储

遍历entryset集合,使用entry类中的getkey和getvalue获取键值对;(Entry是Map的内部类)

三、泛型

避免复杂的类型转换

即参数化数据类型

不能确定具体的引用数据类型,使用泛型表示。

如List --> List, List,

在创建该类对象时使用类类型的数据类型作为参数传入,

List定义了传入的List类属性的引用数据类型是String类型的

四、工具类

数组工具类:Arrays

aslist(一个数组),将数组转为集合

sort,对数组进行排序,(默认是升序),想要降序使用reverse反转

binarySearch,二分查找,必须先升序排序,然后找元素对应下标值

集合工具类;Collection

binarySearch二分查找,sort排序,reverse反转,max最大值,min最小值

五、BigDecimal

使用环境:

数字范围超过基本数据类型long或者double的存储范围

十进制小数转二进制小数可能丢失精度,比如0.1转二进制小数

金融项目对数据精度要求高

构造器可传入数据类型:int,double,long,String(一般使用)

方法:加–add,减–subtract,乘–multiply,除–divide,两个对象操作返回新的对象

// 舍入模式
BigDecimal divide1 = big1.divide(big2, 2, RoundingMode.HALF_UP);
System.out.println(divide1);

ROUND_HALF_UP

//向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,

向上舍入, 1.55保留一位小数结果为1.6,也就是常说的“四舍五入”

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值