二.1.14.1.2.1.arr[i]=(int)(Math.random()*10);
二.1.14.1.3.}
二.1.14.1.4.for(inti:
arr){
二.1.14.1.4.1.System.out.print(i+"");
二.1.14.1.5.}
二.1.14.2.}
二.1.14.3.
二.1.15.}
二.2.集合的特性
二.3.只能存放引用数据类型
二.4.容量没有限制
二.5.由于集合的种类很多,不同的类有不同的特性,我们在使用的时候可以根据不同的需求对集合选择
二.6.集合都有哪些种类
二.6.1.集合主要分为两类
二.6.2.
二.7.Collection学习
二.8.packagecom.aaa.collection;
二.9.importjava.util.ArrayList;
二.10.importjava.util.Collection;
二.11./**
二.12.*@authorky
二.13.*@version创建时间:
2019年8月9日
二.14.*Collection
二.15.*publicinterfaceCollectionextendsIterable
二.16.*1.首先它是接口,其他他有父类
二.17.*
二.18.*Collection两个主要的子接口list,set
二.19.*如果去创建一个Collection家族的集合?
二.20.*要找实现类这次主要用ArrayList
二.21.*
二.22.*Collection定义了很多方法方法学习
二.23.*增加元素的方法
二.24.*booleanadd(Ee)把参数假如对象集合,返回值代表是否增加成功在这里里边E是泛型先不管
二.25.*booleanaddAll(Collection
extendsE>c)将指定集合中的所有元素添加到此集合(可选操作)
二.26.*移除元素的方法
二.27.*voidclear()从此集合中删除所有元素(可选操作)。
二.28.*booleanremove(Objecto)从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
二.29.*booleanremoveAll(Collection
>c)删除指定集合中包含的所有此集合的元素(可选操作)。
二.30.*booleanretainAll(Collection
>c)仅保留此集合中包含在指定集合中的元素(可选操作)。
(你有的我才有你没有的我不留)
二.31.*获取元素的方法
二.32.*查找元素的方法
二.33.*booleancontains(Objecto)如果此集合包含指定的元素,则返回true。
二.34.*booleancontainsAll(Collection
>c)如果此集合包含指定集合中的所有元素,则返回true。
二.35.*booleanisEmpty()如果此集合不包含元素,则返回true。
是否为空
二.36.*比较的方法
二.37.*booleanequals(Objecto)将指定的对象与此集合进行比较以获得相等性。
二.38.*操作的方法
二.39.*intsize()返回此集合中的元素数。
二.40.*Object[]toArray()返回一个包含此集合中所有元素的数组。
二.41.*
二.42.*/
二.43.publicclassTestCollection{
二.43.1.@SuppressWarnings({"rawtypes","unchecked"})
二.43.2.publicstaticvoidmain(String[]args){
二.43.2.1.//利用实现得到了一个Collection对象
二.43.2.2.Collectioncoll=newArrayList();
二.43.2.3.Collectioncoll1=newArrayList();
二.43.2.4.booleanb=coll.add("你好");
二.43.2.5.coll.add("你好1");
二.43.2.6.coll.add("你好2");
二.43.2.7.coll.add("你好3");
二.43.2.8.coll1.add("nihao1");
二.43.2.9.coll1.add("nihao2");
二.43.2.10.coll1.add("nihao3");
二.44.//coll.addAll(coll1);
二.45.//System.out.println(coll);
二.46.//coll1.clear();
二.47.//booleanres=coll.contains("你好21");
二.48.//booleanres=coll.containsAll(coll1);
二.49.//booleanres=coll.equals(coll1);
二.50.//booleanres=coll.isEmpty();
二.51.//booleanres=coll.remove("你好3");
二.51.1.1.System.out.println(coll.toArray());
二.51.2.}
二.52.}
二.53.List学习
二.53.1.List的特点(他的特点是相对于set来说的)
二.53.2.不唯一可以有重复的元素
二.53.3.有序,保证了插入时的顺序
二.53.4.有索引,索引从0开始
二.53.5.List方法学习
二.54.packagecom.aaa.ky;
二.55.importjava.util.ArrayList;
二.56.importjava.util.Collection;
二.57.importjava.util.List;
二.58./**
二.59.*@authorky
二.60.*@version创建时间:
2019年8月12日
二.61.*List学习
二.62.*booleanadd(Ee)将指定的元素追加到此列表的末尾(可选操作)。
二.63.*voidadd(intindex,Eelement)将指定的元素插入此列表中的指定位置(可选操作)。
二.64.*booleanaddAll(Collection
extendsE>c)按指定集合的迭代器(可选操作)返回的顺序将指定集合中的所有元素附加到此列表的末尾。
二.65.*voidclear()从此列表中删除所有元素(可选操作)。
二.66.*booleancontains(Objecto)如果此列表包含指定的元素,则返回true。
二.67.*booleancontainsAll(Collection
>c)如果此列表包含指定集合的所有元素,则返回true。
二.68.*booleanequals(Objecto)将指定的对象与此列表进行比较以获得相等性。
二.69.*Eget(intindex)返回此列表中指定位置的元素。
二.70.*intindexOf(Objecto)返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
二.71.*booleanisEmpty()如果此列表不包含元素,则返回true。
二.72.*Eremove(intindex)删除该列表中指定位置的元素(可选操作)。
二.73.*booleanremove(Objecto)从列表中删除指定元素的第一个出现(如果存在)(可选操作)。
二.74.*booleanremoveAll(Collection
>c)从此列表中删除包含在指定集合中的所有元素(可选操作)。
二.75.*booleanretainAll(Collection
>c)仅保留此列表中包含在指定集合中的元素(可选操作)。
二.76.*Eset(intindex,Eelement)用指定的元素(可选操作)替换此列表中指定位置的元素。
二.77.*intsize()返回此列表中的元素数。
二.78.*Object[]toArray()以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
二.79.*T[]toArray(T[]a)以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素);
二.80.*返回的数组的运行时类型是指定数组的运行时类型。
二.81.*
二.82.*/
二.83.publicclassListTest{
二.83.1.@SuppressWarnings({"rawtypes","unchecked"})
二.83.2.publicstaticvoidmain(String[]args){
二.83.2.1.Collectioncoll=newArrayList();
二.83.2.2.coll.add("abc1");
二.83.2.3.coll.add("abc2");
二.83.2.4.coll.add("abc3");
二.83.2.5.System.out.println(coll);
二.83.2.6.Listlist=newArrayList();
二.83.2.7.System.out.println(list);
二.83.2.8.list.add(coll);
二.83.2.9.System.out.println(list);
二.83.2.10.list.add("aaa1");
二.83.2.11.list.add("aaa2");
二.83.2.12.list.add("aaa3");
二.83.2.13.System.out.println(list);
二.84.//list.clear();
二.85.//System.out.println(list);
二.86.//booleanb=list.contains("aaa1");
二.87.//System.out.println(b);
二.87.1.1.list.set(0,"hello");
二.87.1.2.System.out.println(list);
二.87.1.3.Object[]objs=list.toArray();
二.87.1.4.System.out.println(objs);
二.87.1.5.String[]strs=(String[])list.toArray(newString[0]);
二.87.1.6.System.out.println(strs);
二.87.2.}
二.88.}
二.88.1.List如何遍历
二.88.2.遍历的第一种方法
二.88.2.1.因为List有get(0)方法,所以我们可以使用for循环的方式去取数据
二.88.2.2.
二.88.3.遍历的第二种方法(迭代器)
二.88.3.1.我们通过iterator()方法,获取一个Iterator对象
二.88.3.2.
二.88.3.3.我们通过这些方法去遍历获取list里边所有的元素
二.88.3.3.1.
二.88.4.遍历的第三种方法
二.88.4.1.增强for循环foreach
二.88.5.使用迭代器的速度比较快,get方法太慢,不推荐,在不需要更改集合的的时候,可以使用foreach
二.88.6.List的实现类
二.88.7.ArrayList
二.88.7.1.packagecom.aaa.ky;
二.88.7.2.importjava.util.ArrayList;
二.88.7.3./**
二.88.7.4.*@authorky
二.88.7.5.*@version创建时间:
2019年8月12日
二.88.7.6.*ArrayList学习
二.88.7.7.*ArrayList的特性及方法的底层实现
二.88.7.8.*特性:
是针对以LinkedList
二.88.7.9.*1.ArrayList查询效率高
二.88.7.10.*2.ArrayList增删效率低
二.88.7.11.*ArrayList的底层实现
二.88.7.12.*依靠于数组
二.88.7.13.*方法实现
二.88.7.14.*add方法的实现
二.88.7.15.*ensureCapacityInternal(size+1);查看是否要,扩容
二.88.7.16.*elementData[size++]=e;数组赋值
二.88.7.17.*每次都会判断底层的数组elementData需不需要扩容,如果需要就扩容,如果不需要就直接添加值
二.88.7.18.*get方法
二.88.7.19.*在获取前先去找是否越界,如果越界直接抛出异常
二.88.7.20.*remove方法
二.88.7.21.*就是生成一个数组,把elementData数组中出去要移除的元素,其余的都copy过去
二.88.7.22.*/
二.88.7.23.publicclassArrayListTest{
二.88.7.23.1.@SuppressWarnings("rawtypes")
二.88.7.23.2.publicstaticvoidmain(String[]args){
二.88.7.23.2.1.ArrayListarrList=newArrayList();
二.88.7.23.2.2.arrList.add("123");
二.88.7.23.2.3.arrList.get
(2);
二.88.7.23.2.4.arrList.remove(0);
二.88.7.23.3.}
二.88.7.24.}
二.88.7.25.ArrayList需要注意的是扩容的问题
二.88.8.Vector
二.88.8.1.Vector学习
二.89.packagecom.aaa.ky;
二.90.importjava.util.Vector;
二.91./**
二.92.*@authorky
二.93.*@version创建时间:
2019年8月12日
二.94.*Vector学习
二.95.*intcapacity()返回此向量的当前容量。
二.96.*intsize()返回此向量中的组件数。
二.97.*booleanisEmpty()测试此矢量是否没有组件。
二.98.*Eget(intindex)返回此向量中指定位置的元素。
二.99.*/
二.100.publicclassVectorTest{
二.100.1.@SuppressWarnings("rawtypes")
二.100.2.publicstaticvoidmain(String[]args){
二.100.2.1.Vectorvector=newVector();
二.100.2.2.System.out.println(vector.capacity());
二.100.2.3.System.out.println(vector.size());
二.100.3.}
二.101.}
二.101.1.1.Vector的方法基本上也都和list一致,所以在这里不说那么多
二.101.1.2.在这里说一下Vector和ArrayList的区别
二.101.1.2.1.Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector
二.101.1.2.2.避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
二.101.1.2.3.简单的说Vector效率低,但是线程安全
二.101.2.LinkedList
二.101.2.1.LinkedList表示链表的操作类,它同时实现了List和Queue接口。
二.101.2.2.它的优点在于向集合中插入、删除元素时效率比较高,
二.101.2.3.特别是可以直接对集合的首部和尾部元素进行插入和删除操作,LinkedList提供了专门针对首尾元素的方法,
二.101.3.什么是链表
二.101.3.1.链表有两种
二.101.3.1.1.单向链表
二.101.3.1.1.1.
二.101.3.1.2.双向链表
二.101.3.1.2.1.
二.101.3.1.3.双向循环链表
二.101.3.1.3.1.
二.101.3.2.链表的特性
二.101.3.2.1.在内存中不是一块连续的空间
二.101.3.2.2.每个元素里边都存储着下一个元素的地址,链表的元素之间通过地址寻找
二.101.3.2.3.查询速度慢是因为必须一个一个元素的去寻找,无法定位到某个元素所处的空间,然而,arrayList不同,底层就是一个数组是一块连续的空间,我们很容易就定位到某个元素,所以arrayList查询速度比较快
二.101.3.2.4.增删速度快的原因是因为,删除元素的时候我们只需要对这个元素的上一个元素和下一个元素指向的位置进行改变就行了但是arrayList需要对整个数组进行修改,生成一个新的数组,所以内存的开销比较大
二.102.泛型的学习?
二.103.Set接口学习
二.103.1.Set
二.103.2.packagecom.aaa.ky;
二.103.3.importjava.util.HashSet;
二.103.4.importjava.util.Iterator;
二.103.5.importjava.util.Set;
二.103.6./**
二.103.7.*@authorky
二.103.8.*@version创建时间:
2019年8月12日
二.103.9.*set接口的特性
二.103.10.*1.元素唯一不能有重复的元素
二.103.11.*2.无序的,集合内的元素都是无序的。
具体实现类具体分析
二.103.12.*3.没有索引
二.103.13.*set接口的方法
二.103.14.*和collection一致不说了
二.103.15.*set接口的实现类
二.103.16.*HashSet
二.103.17.*TreeSet
二.103.18.*LinkedHashSet
二.103.19.*set的遍历
二.103.20.*1.迭代器
二.103.21.*2.foreach
二.103.22.*set的底层
二.103.23.*set的底层是依赖于map的,每一个set实例底层都包含一个map
二.103.24.*/
二.103.25.publicclassSetTest{
二.103.25.1.publicstaticvoidmain(String[]args){
二.103.25.1.1.Setset=newHashSet();
二.103.25.1.2.set.add("AAA");
二.103.25.1.3.set.add("欢迎你们来学习");
二.103.25.1.4.set.add("如果你在学习中遇到了困难");
二.103.25.1.5.set.add("可以练习我们的老司机");
二.103.25.1.6.set.add("例如");
二.103.25.1.7.set.add("AAA老哥");
二.103.25.1.8.//遍历
二.103.25.1.9.Iteratorit=set.iterator();
二.103.25.1.10.while(it.hasNext()){
二.103.25.1.10.1.System.out.println(it.next());
二.103.25.1.11.}
二.103.25.1.12.for(Stringstring:
set){
二.103.25.1.12.1.System.out.println(string);
二.103.25.1.13.}
二.103.25.2.}
二.103.26.}
二.103.27.为什么我们不能往set里边添加重复的值呢?
二.103.28.请看代码
二.103.29.packagecom.aaa.ky;
二.103.30.importjava.util.HashSet;
二.103.31.importjava.util.Set;
二.103.32./**
二.103.32.1.*@authorky
二.103.32.2.*@version创建时间:
2019年8月12日
二.103.32.3.*HashCode学习
二.103.32.4.*