JAVA String基础笔记(4)
s1 是一个类类型变量,“abc”是一个对象 。
字符串最大特点:一旦被初始化就不可以被改变
StringBuffer 是一个容器
1.而且长度是可变的
2.可以字节操作多个数据类型
3.最终会通过tostring方法变成字符串
JDK1.5之后 出现了string builder
StringBuffer是线程同步的
StringBuilder 是线程不同步的
集合 Collection
collection
List :元素是有序的,元素可以重复,因为该集合体系有索引。
ArrayList:底层的数据结构使用的是数组结构。特点:查询速度快,但是增删稍慢,线程步同步
LinkedList:底层的使用的是链表结构。特点:增删速度很快,查询稍慢,线程不同步
Vector:底层是数组数据结构。线程同步。被ArrayList替代 因为效率低
Set:元素是无序的(存入和取出的顺序不一定一致),元素不可重复
Set集合的功能和Collection是一致的
常见的子类
HashSet:底层数据结构是哈希表 线程是非同步的
HashSet是如何保证元素唯一性的呢?
通过元素的两个方法,hashCode和equals来完成
如果元素的HashCode值相同,才会判断equals是否为True
如果元素的HashCode值不同,不会调用equals
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是hashCode和equals
TreeSet:可以对Set集合中的元素进行排序。compare to 进行排序
记住排序时当主要条件相同时,一定要比较次要条件
底层是2叉树 保证元素唯一性的依据:compareto 删除 增加 都要在compareto中判断
TreeSet的第二种排序方式。
当元素自身不具备比较性,或者具备的比较性不是所需要的
这时需要让集合自身具备比较性(在集合初始化时,就具备比较方式)借助构造函数 new TreeSet(CompareInter)
泛型
泛型格式 :通过<>来定义要操作的引用数据类型
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见
只要见到<>就要定义泛型
当使用集合时,将集合中要存储的数据类型作为参数传递到<>即可
泛型类定义的泛型在整个类中有效,如果被方法使用
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了
为了让不同方法可以操作不同类型,而且类型还不确定
那么可以将泛型定义在方法上