集合
Set集合:元素是无序的,元素不能重复
--------->HashSet :存值方式使用哈希表来存储的
原理:如果HashSet中存放对象,首先回调用对象的hashCode方法获取到哈希值,通过哈希值做移位等运算。计算元素在哈希表中的位置,
泛型:在java jdk1.5之后才推行的一种新特性,
泛型的好处:
1.将运行是的错误提前到编译时;
2.避免无谓的强制类型转换
自定义方法泛型:自定义泛型就是一个数据类型的占位或者叫一个数据类型的变量,一般用T或者E来做为占位符()占位符是可以随意写的,必须遵守标识符的命名规范
方法泛型的格式:
public static 数据类型 <占位符> T : 定义一个泛型类型
如果你传递的是基本数据类型;接受的时候应该用它包装来接受
int ----->Integer
short---->Short
double---->Double
float------->Float
byte------->Byte
boolean---->Boolean
long--------->Long
char----------->Charactor
<String> 泛型:确定集合中只能存放某一种数据类型的对象
泛型注意点:
1.泛型方法中自定义一个泛型数据的类型是在实际参数传递时被确定的
2.泛型所用的标识符需要符合标识符的命名规范,一般习惯用大写字母来表示
3.泛型类上自定义泛型的类型是在创建这个类的对象时确定的
4.如果一个自定义泛型的类,在创建对象的没有给指定的类型,默认为object类型
5.静态的方法是不能够使用类上自定义的泛型,必须在方法上定义一个泛型
定义一个泛型类:
定义格式:
class 类名 (声明自定义的泛型)
类名定义泛型:
格式:
class 类名<声明自定义类型>
泛型接口的定义方式:
interface 接口名 <声明自定义的类型>{}
接口泛型使用注意点:
1.接口上自定义的泛型是在实现该接口的时候被指定的
2.如果实现接口是没有指定接口,那么就默认为object
3.需要在创建接口实现类对象是指定数据类xing,那么需要格式 : class 类名<声明自定义泛型>implements 接口<声明自定义泛型>
Map集合 接口 双列集合 K:V oc中的字典很像
特点: 存储数据是以键和值的方式,键不允许重复,值是允许重复的
--------->HashMap
--------->TreeMap
--------->HashTable
Map中常用的方法:
添加:
put();添加指定的元素
putall()添加整个集合
删除:
clear()清空所有的
remove()清楚指定的
获取:
get(Object key); 通过键来获取值
size()获取集合中元素的个数
isEmpty()是否有元素
containsKey()是否存在某一个键
containsValue()判断是否存在某一个值
判断:
isEmpty()是否有元素
containsKey()是否存在某一个键
containsValue()判断是否存在某一个值
Map使用注意点:
1. 键可以是任意类型对象,值也可以是任意对象
2.集合中是可以嵌套存list(Map)集合
HashMap :存储原理也使用哈希表存放的 底层给予哈希表
往HashMap添加元素,首先会调用键的hashCode方法 获得一个哈希值,然后经过运算获取一个位置
情况一,如果位置上没有元素,那么就直接将该元素存放在此位置
情况二,如果位置上有了元素,那么还会调用元素equals方法与这个位置的元素做比较,如果返回回来的是true,那么就被视为相同的键,就不存,如果返会的是false,那么就可以存该元素
TreeMap :给予二叉树放的结构存储,特点:以键来做自然排序,键具备自然排序,元素存值就是通过自然排序来存值的
使用注意点:
1.往TreeMap 添加的元素时,如果元素的键具备自然排序功能,那么就会通过自然排序对元素进行排序
2.往TreeMap 添加元素时,如果不具备自然排序的特性,键所属的类必须要实现Compartable接口,把这个键的比较规则定义在CompareTo方法中
3.往TreeMap 添加元素时,如果不具备自然排序的特性,也没有实现Compareable接口,创建TreeMap的时候给他一个比较器
结构:
class 类名 implements CompareTable 接口{}
键的比较规则定义在compare方法中
HashTable: HashMap 一样的使用,线程安全,访问比较慢
Map的遍历方式:
迭代器遍历:
Map 遍历元素的方式一: keySet();Set视图----> 获取所有的键用Set集合来保存
特点:通过遍历键,通过键来取值
Map遍历元素的方式二:values();获取Map集合中所有的值,用collection集合来保存
Map遍历元素的方式三: entryset();
Map.Entry: 接口 :提供给用户来操作map集合
getKey();获取键
getValue();获取值
setValue();更改值
Collection :接口
Collection :集合的工具类 Arrays(数组的工具类)只能操作list集合
Collection 和 Collections 的区别
Collection是一个单例集合的根接口,Collections是操作集合的工具类
Collections中的常用方法
1. 对List进行二分查找 :
前提该集合一定要有序 ::
int binarySearch(list,key)
必须根据元素自然顺序对列表进行升级排序 要求:list集合中的元素都是Comparable的子类
int binarySearch(list,key,Compareator);
2.对list集合进行排序
sort(list)
对list进行排序,其实使用的是list容器中的对象的CompareTo方法
sort(list,comaprator)
按照指定比较器进行排序
3.对集合取最大值或者最小值
max(Collection)
max(Collection,comparator)
min(Collection)
min(Collection,comparator)
4.对list集合进行反转
reverse(list);
5.对比较方式进行强行逆转
Comparator reverseOrder();
Comparator reverseOrder(Comparator);
6.对list集合中的元素进行位置的转换
swap(list,x,y);
7.对list集合进行元素的替换,如果被替换的元素不存在,那么原集合不变
replaceAll(list,old,new);
8.可以将不同步的集合变成同步的集合
Set synchronizeSet(Set<T>s)
Map synchronizedMap(Map<K,V>m)
List synchronizedList(List<T>list)
9.如果想要将集合变数组
可以使用Collection中的toArray 方法,注意:是Collection不是Colection工具类
传入指定的类型数组即可,该数组的长度最好为集合的size