-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一,泛型
数据结构。组织数据的方式。栈,队列,链表,数组,树,图,堆...
1,栈:先进后出。
2,队列:先进先出。
3,数组:存储多个同一种元素的容器。
特点:元素都有编号,方便获取。优点:查询速度快,缺点:增删速度慢。
4,链表把一些结点通过用链子连接起来的数据结构。
结点:由地址(指针)域和数值域组成。优点:增删速度快,缺点:查询速度慢。
泛型:泛型是一种把明确类型的工作放在了创建对象或者调用方法时候才去明确的特殊的类型。
格式:<数据类型>
好处:(掌握)
A:解决了黄色警告线问题
B:把运行期间的转换异常给提前到了编译期间
C:优化了程序设计,不需要做强制类型转换了
什么时候使用泛型:看API中的类或者接口,其后是否跟有<>,如果有,就是泛型的应用。一般在集合中用。
增强for循环(掌握)
1,格式:
for(数组或者Collection集合的元素类型 变量 : 数组或者Collection集合的对象)
{
直接使用变量即可。
}
2,好处:
方便了数组和Collection集合的遍历。
3,注意
A:增强for是用来替代迭代器的。B:不要在用增强for遍历集合的时候,用集合对集合本身进行修改。
4遍历集合三种方式
迭代器
普通for+get
增强for
泛型类
1、若类实例对象中要使用到同一泛型参数,即这些地方引用类型要保持同一个实际类型时,这时候就要采用泛型类型的方式进行定义,也就是类级别的泛型。
2、什么时候定义泛型类
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。现在定义泛型来完成扩展。
3、泛型类定义的泛型,在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所以要操作的类型就已经固定了。
4、类级别的泛型是根据引用该类名时指定的类型信息来参数化类型变量的,例如,如下两种方式都可以:
GenericDao<String>dao = null;
newgenericDao<String>();
5、语法格式:
class Utils<XX>
{
private XX s;
public void setxx(XX s)
{
this.s=s;
}
public XX getXX()
{
return s;
}
}
泛型方法
为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。
class Demo<Q>
{
public void run(Q q){}
public <T> void show(T t) {}
public <E> void print(E t){}
public static <W> void method(W t){}
}
二,Collections
Collections是针对Collection集合操作的工具类。它里边的方法都是静态的,不需要创建对象。并未封装特有数据。
Collections和Collection的区别。
Collection是Collection集合的顶层接口,定义了Collection集合的共性方法。
Collections是一个类,定义了针对Collection集合操作的功能。有排序,查找等。
public class CollectionsDemo {
<span style="white-space:pre"> </span>public static void main(String[] args) {
<span style="white-space:pre"> </span>// 创建集合对象
<span style="white-space:pre"> </span>ArrayList<Integer> array = new ArrayList<Integer>();
<span style="white-space:pre"> </span>// 添加元素
<span style="white-space:pre"> </span>array.add(60);
<span style="white-space:pre"> </span>array.add(25);
<span style="white-space:pre"> </span>array.add(38);
<span style="white-space:pre"> </span>array.add(213);
<span style="white-space:pre"> </span>array.add(99);
<span style="white-space:pre"> </span>array.add(22);
<span style="white-space:pre"> </span>System.out.println("array:" + array);
<span style="white-space:pre"> </span>// 排序
<span style="white-space:pre"> </span>//public static void sort(List list)
<span style="white-space:pre"> </span> Collections.sort(array);
<span style="white-space:pre"> </span> System.out.println("array:" + array);
<span style="white-space:pre"> </span>// 二分查找
<span style="white-space:pre"> </span>// public static <T> int binarySearch(List list,T key)
<span style="white-space:pre"> </span>// [22, 25, 38, 60, 99, 213]
<span style="white-space:pre"> </span> int index = Collections.binarySearch(array, 60);
<span style="white-space:pre"> </span> System.out.println("index:" + index);
<span style="white-space:pre"> </span>// 反转
<span style="white-space:pre"> </span>// public static void reverse(List list)
<span style="white-space:pre"> </span>// [60, 25, 38, 213, 99, 22]
<span style="white-space:pre"> </span> Collections.reverse(array);
<span style="white-space:pre"> </span> System.out.println("array:" + array);
<span style="white-space:pre"> </span>// 最大值
<span style="white-space:pre"> </span>// public static T max(Collection coll)
<span style="white-space:pre"> </span> Integer i = Collections.max(array);
<span style="white-space:pre"> </span> System.out.println(i);
<span style="white-space:pre"> </span>// 随机置换:public static void shuffle(List list)
<span style="white-space:pre"> </span>Collections.shuffle(array);
<span style="white-space:pre"> </span>System.out.println("array:" + array);
<span style="white-space:pre"> </span>}
}
常见操作
1、查找
Tmax(Collection<? extends T> coll);//根据集合的自然顺序,获取coll集合中的最大元素
Tmax(Collection<? extends T> coll,Comparator<? super T> comp);//根据指定比较器comp的顺序,获取coll集合中的最大元素
intbinarySearch(Lsit<? extends Comparable<? super T>> list,Tkey);//二分法搜索list集合中的指定对象
2、替换
voidfill(List<? super T> list, T obj);//将list集合中的全部元素替换成指定对象obj
booleanreplaceAll(List<T> lsit,T oldVal,T newVal);//用newVal替换集合中的oldVal值
void swap(Listlist,int i,int j);/在指定列表的指定位置处交换元素
3排序:
void shuffle(List<?> list);//使用默认随机源对list集合中的元素进行随机排序
void sort(Lsit<T> list);//根据自然顺序对list集合中的元素进行排序
voidsort(List<T> lsit,Comparator<? super T> c);//根据指定比较器c的排序方式对list集合进行排序
4、反转
reverse(List<?> list);//反转list集合中元素的顺序
Comparator reverseOrder();//返回一个比较器,强行逆转了实现Comparable接口的对象的自然顺序
ComparatorreverseOrder(Comparator<T> cmp);//返回一个比较器,强行逆转了指定比较器的顺序
5、同步的集合
List<T>synchronizedList(List<T> list);//返回支持的同步(线程安全的)List集合
Map<K,V>synchronizedList(Map<K,V> m);//返回支持的同步(线程安全的)Map集合
三、Arrays
Arrays是用于操作数组的工具类。里边的方法也全是静态的。不需要创建对象。
把数组变成List集合的好处:可以使用集合的思想和方法来操作数组中的元素。如:contains,get,indexOf,subList等方法。
常见方法
1、Lsit<T> asList(T... a);//将数组转换为集合
2、binarySearch():二分查找方法,fill():替换方法,sort():排序方法等
集合变数组
Collection接口中的toArray方法。
<T> T[]toArray(T[] a);将集合变为指定类型的数组。