集合
Collection接口,定义了存放一组对象的方法。其子接口有两个
list
list中的数据对象有顺序而且可以重复。有索引
list的实现类有:
Arraylist
Arraylist的底层是object数组。查找快,增删慢。
因为是数组,查找的时候根据索引来查,所以查找很快。
增删慢是因为增加或者的时候涉及元素的移动。如果往最后一位添加就可以直接添加,但是往中间添加的时候,之 后的元素都要移动。添加索引越小的元素移动的越多。
Linkedlist
Linkedlist的底层是链表。查找慢,增删快。
链表中的数据类型是在内存中是松散的。
list的常用方法
add();//添加
set();//将某个元素设置为
get();获得
indexof();//获得某个元素的位置。
remove();移除
list的常用算法
sort();//排序
reverse();//逆序
binarysearch();//折半查找
shuffle();//随机排列
set
set中的数据对象没有顺序不可以重复,没有索引。
set集合的实现类
hashset
Treeset
Linkedhashset
set接口的常用方法
size();//长度
isEmpty();//是否为空
contains();//是否包含
Object[] toArray();//转换为数组
add();//添加
remove();//移除
containsAll();//是否包含所有
addAll();//添加所有
retainAll();//求交集
removeAll();//移除所有
clear();//清除
map
实现map接口的类用来存储键值对(key value)
map的实现类有:
treemap
treemap用红黑树来实现。
hashmap
haspmap用哈希表来实现。
map类中存储的键值对通过建来标识,所以键不能重复。(不能重复指的是相互equals()的时候不能重复。)
map接口的常用方法
put();//添加
get();//取值
remove();//移除
containKey();//是否包含键
containValue();//是否包含值
size();//长度
isEmpty();//是否为空
putAll();//添加所有
clear();//清除
collection接口的常用方法
add();//新增
isEmpty();//是否为空;
contains();是否包含;
remove();删除
clear();清除
size();长度
object[] toArray();转为数组
comparable接口
所有可以排序的类都实现了java.lang.comparale接口,comparable接口只有一个方法:
public int Comparable(Object obj){
//返回0时表示this=obj;
//返回正数时表示this>obj;
//返回负数时表示this<obj;
}
//实现了comparable接口的类通过实现comparaTo方法从而确定该类对象的排列方式。
如何选择数据结构
衡量标准是读的效率和改的效率。
二.迭代器Iterator
所有实现了Collection接口的容器类都有一个Iterator方法用以返回一个实现了Iterator接口的对象。
Iterator成为对象迭代器,用于子元素内的元素的遍历操作。
它定义了如下方法:
boolean hasNext();//判断是否还有下一个元素
object next();
void remove();//移除
//注意,用迭代器遍历collection集合时,不能对集合进行增删操作。
三.增强For循环
增强for循环的底层就是迭代器。
for(数组数据类型/集合的泛型 变量名:要遍历的数组/结合 ){
}
四.泛型
泛型是未知的数据类型
定义含有泛型的类
public class 变量名<E>(){
//可以是成员变量的类型
//E 变量名;
//可以是成员方法的参数类型
public E 方法名(E e){
}
}
什么时候确定泛型的类型:创建对象的时候确定泛型的类型,
如果创建对象的时候,没有确定,那么默认泛型是Object类型
类名 对象名 = new 类名();
1. 定义和使用含有泛型的方法
单独的某一个方法中使用泛型:
修饰符 <E> 返回值 方法名(E e){
}
修饰符 static <E> 返回值 方法名(E e){
}
2. 定义和使用含有泛型的接口
public interface Inter<E>{}
使用方式一:
public class 类名 implements Inter<String>{
}
使用方式二:
public class 类名<E> implements Inter<E>{}
类名<String> 对象名 = new 类名<>();
3.泛型通配符
通配符:?
作为方法的参数: ArrayList<?> list 或者 ArrayList list
作为方法的返回值:ArrayList<?> list 或者 ArrayList list
上限限定泛型的写法: ? extends E //可以是E类型或者是E类型的子类类型
下限限定泛型的写法: ? super E //可以是E类型或者是E类型的父类类型