9.2接口下的继承者
collection是集合类的基本接口(set,list)也是list和set的父接口,
set接口
set接口集成子collection,同事加入了额外的内容,改接口要求不包含重复元素,最多允许一个Null元素
实现set接口的抽象类是AbstractSet,他集成子ABstractCollection,作用是提供接口主要部分的实现,以此来减少其它类实现改接口是的工作量,abstract抽象类没有重写弗雷德方法,但帮助了equals方法和hashCode方法的实现
Set接口有6个具体的实现类,其中常用的2个类是hashSet和TreeSet其中HashSet中的元素无序且不重复,而TreeSet则是按红黑树方式有序且不重复
hashset 是通过hashMap来实现的,增加到里面是元素的顺序和输出是的顺序可能不同,该集合通过hashCode(散列码)来定位数据,时候转么为提高查询速度设计的Set的接口
treeSet通过Treemap 来实现那,是一个有序的Set的接口,但数据无需好,既没有办法利用类似个体的方法来获取数据,其运行的速度相对HashSet要慢
说明:set的接口不包含重复元素的含义是指,当元素利用equals方法相互比较是返回false被视为相互不重复
9.2.3HashSet和TreeSet
HashSet常用方法
序号 方法名 说明
1 HashSet() 构造方法,创建空的集合,默认初始容量16,装在因子0.75
2 HashSet(int initialCapacity) 构造方法,创建新集合,装在因子0.75,包含集合c中所有元素,允许未结合制定元素类型(泛型)
3 HashSet(int initialCapacity,float loadFactor) 构造方法,创建指定容量的空寂和,装载因子为0.75
4 add(E e) 想调用该方法上午集合中添加元素0,添加成功返回true,石板返回false
5 remove(Object o) 从调用该方法的集合中删除指定的元素
6 size() 返回几盒内的元素数量
7 clear() 清空调用该方法的集合
8 isEmpty() 判断调用该方法的集合是否为空
9 contains(Object o) 如果调用该方法的集合中包含元素0则返回true
10 clone() 返回HashSet的实例拷贝,但是里面的元素不会复制
11 iterrator 返回迭代器,以便输出集合中的数据,返回类型Iterator
说明:HashSet的优势在自执行效率,由于立体中对集合的操作少,且数据很小,因此优势并明显
TreeSet继承Abstract抽象类,实现了Sort额度Set,NavigableSet,Cloneable 和Java.io.Serializable 等接口,是哦个有序集合(自然排序)利用迭代器输出及河内的数据时,会遵循排序后的顺序输出
9.2.4list接口
list在util包下,继承了Collection接口,允许存放重复项,试剂盒日常开发中最常用的接口,它使用灵活,可以增加,移除元素,也可以根据索引访问制定元素,他有10个实现类,常用的时ArrayList和LinkedList
ArrayList继承自AbstractList,可称为动态数组,其容量自动增长,允许存储Null值,在数组中间增加数据或删除数据比较耗时。需要注意的时ArrayList不是现成安全的。LinkList的直接父类是AbstractSequentialList,LinkedList是给予啥UN个相连表示的数据结构,允许存储Null值,随机访问值速度比ArrayList要慢,而在中间增加或删除元素的速度要优于ArrayList
对于collection 接口,List接口主要增加了一下的方法
add(int index ,E element):在列表制定位置增加制定元素。
addAll(int)
9.5.Map 接口
Map没有继承了Collection而是定义了新的数据结构,丐姐库支持数据键值
9.5.1Map接口简介:
Map提供了一键值为映射关系来哦存储数据的方式,其中每个key最多映射一个value同时key不允许重复,且无序,改接口常用实现类有hashTable,HashMap,TreeMap等
HashTable继承自Dictionary并实现了Map的接口,他实现了将键映射到对应值得哈希表,允许NULL做键或值,且是线程安全的
HashMap继承自抽象类AbstractMap,也是基于哈希表 Map的实现类,允许将值作为key(只能一条)或Value(任意数量),是非线程安全的,
TreeMap继承自AbstractMap,是基于红黑树的NavigableMap的实现类,是一个有序的Map,非线程安全,适合按照自然顺序或自定义顺序遍历键;单纯插入,删除定位元素比Hashmap稍差
说明;如果考虑线程安全,则可以使用外部方式实现线程安全。
Treemap 只能对key排序,不能对value排序
9.6泛型集合
集合存储数据时,会把数据自动转为Object的累心存储,然后取出时会把它在强制在转换成元数据类型,当粗怒时的数据类型和准备转换成的数据类型不兼容时,则回报类转换异常
List<E>变量名;
变量名=new ArrayList<E>();
//或者
List<E>变量名=new ArrayList<E>();
List<E>:尖括号时必须存在的,其中额表示标记符,代表集合中的元素类型,可认为时Element的缩写,没有什么实际的意义,也可以用其他字符来代替,E代表的具体数据类型是String,自定义类型Object等
ArrayList:实现List接口的集合类,他偶棉的S标记符的具体数据类型要和前面的一致
经常遇到的在尖括号中的标记符还有T(Type,表示类)K(Key表时键)V(Value)
注意:
翻新不是必须使用的,但作者建议在集合类中使用泛型,以降低出错几率
9.7常用工具类
Java除了自带针对集合操作的工具类Collection外,也提供了其他方向的工具类,例如包含数学操作的math类,针对日期操作的日期类,针对字符串操作的类以及实现随机算法的Random类
9.7.1Java API文档
API文档提供给开发这使用的参考资料,利用该文档,可以快速查找Java内置的类以及相关方法的使用说明,是开发者必不可少的自考
通常API文档都是通过CTRL+F组合键查找具体的类或接口(也可从具体的包中找到具体的类),然后但积类的链接,进入页面后查看该具体类的详细情况
在类的说明部分,会详细介绍类或皆苦的继承框架,所有实现的接口,所有自而立或子接口以及勒种包含的各种方法等
9.7.2math 类
Math类
例如:针对弧度,获取正余弦值,输出较大的数:
public class MathDemo{//类
public static void main(String atgs[]);
doube c =Math.cos(5.08);//获取余弦值
double s=math.sin(5.08);//获取正弦值
double m=math.max(c,s);//获取俩个数中最大的数
System.out.pritln("较大的数是:"+m);
}
}
9.7.3
日期处理:
日期处理分为三类:
date(日期)calendar (日历)以及simpledateformat