中心网站建设方法,建筑工具网站,sem公司,中建二局官网java集合就是一个容器。1. 集合概述l 为了保存不确定的数据#xff0c;或者对象#xff0c;以及保存具有映射关系的数据。l 所有的集合类都位于java.util包下。1.1. 什么是集合#xff0c;有什么特点#xff1f;面向对象语言对事物的体现都是以对象的形式存…java集合就是一个容器。1. 集合概述l 为了保存不确定的数据或者对象以及保存具有映射关系的数据。l 所有的集合类都位于java.util包下。1.1. 什么是集合有什么特点面向对象语言对事物的体现都是以对象的形式存在所以为了方便对多个对象的操作就对对象进行存储集合就是存储对象最常用的一种方式。集合只用于存储对象集合长度是可变的集合可以存储不同类型的对象。1.2. 集合与数组的区别(集合特点)首先我们要知道集合与数组是不同其中集合是可变长度的集合中用size()而数组是固定长度的数组中是用length()集合是用来放对象的数组可以存储基本数据也可以存储引用数据类型有一点需要注意下如果集合存放基本数据类型在存取过程中会有个自动装箱和拆箱集合可以放任意对象(引用嘛)但是数组只能放相同的数据类型对于如何使用集合我们先看顶层的方法然后去调用底层的子类来实现具体的功能。1.3. 集合框架由于集合内部的数据结构不同集合分为多种容器。这些容器不断的向上抽取就形成了集合框架。Collection|----------List(有序,元素都有索引(角标)元素可以重复)|--------Vector基于数组实现同步线程安全。增删查询都慢。|--------ArrayList基于数组实现不同步线程不安全需要手动同步查询的速度快|--------LinkedList基于链表实现不同步线程不安全需要手动同步增删都很快|----------Set(无序元素不可以重复)|--------HsahSet基于哈希表实现不同步的。|--------LinkedHsahSet|--------TreeSet基于二叉树实现不同步的。自然排序定制排序Map集合(键值对)|----------TreeMap基于二叉树可以排序|----------HashMap哈希表实现Iterator迭代器|----------Collection每个集合都有迭代器|----------ListIterator主要用于List集合迭代迭代过程可以操作元素1.4. 集合常见方法Collection的常见方法1添加boolean add(Object obj)://添加元素booleanaddAll(Collectioncoll)://添加给定集合到当前集合2删除boolean remove(object obj)://删除元素booleanremoveAll(Collectioncoll);void clear();//清空集合3判断boolean contains(object obj)://是否包含指定元素booleancontainsAll(Colllectioncoll);//是否包含给定集合booleanisEmpty():判断集合中是否有元素。4获取int size():Iterator iterator():取出元素的方式迭代器。5其他booleanretainAll(Collection coll);取交集。Object[] toArray():将集合转成数组。1.5.遍历集合迭代器Iterator也是集合框架的成员但它主要用于遍历集合中的对象封装了各种集合的底层细节给集合框架提供了统一的接口。比如这里举个例子。主要有3个方法booleanhashnext();如果仍有元素可以迭代则返回trueE next()返回迭代的下一个元素void remove()移除迭代器返回的最后一个元素而对于map类集合有2中方式来遍历1keySet()获取键对应的Set集合然后在用Iterator配合get(Object key)获取每一个键所对应的值。2entrySet()获取键值对集合存入Map.Entry集合中Iterator对其进行迭代在用getKey()取出键getValue()取出值。1.6. 集合的一些技巧需要唯一吗需要Set需要制定顺序需要TreeSet不需要HashSet但是想要一个和存储一致的顺序(有序):LinkedHashSet不需要List需要频繁增删吗需要LinkedList不需要ArrayListl 看到array就要想到数组就要想到查询快有角标.l 看到link就要想到链表就要想到增删快就要想要 add get removefrist last的方法l 看到hash:就要想到哈希表就要想到唯一性就要想到元素需要覆盖hashcode方法和equals方法。l 看到tree就要想到二叉树就要想要排序就要想到两个接口ComparableComparator 。2. List集合l 有序(存入和取出的顺序一致),元素都有索引(角标)元素可以重复。l 对于List根据其内部结构不同又分为Arraylist、LinkedList、Vectorl 共性特点可以操作角标2.1.List子系List:|----Vector:数组数据结构是同步的。增删查询都很慢已经呗ArrayList替代了|----ArrayList:数组数据结构是不同步的。。查询的速很度快。|----LinkedList:链表数据结构是不同步的。增删的速度很快。2.2.List常用共性方法1添加元素voidadd(intindex,Eelement); //指定位置插入元素void add(index,collection); //将给定的集合添加到末尾2删除元素Object remove(index): //删除指定交表的元素返被背删除的3修改元素Objectset(intindex,Eelement); //用指定元素替换列表中指定位置的元素4获取元素Object get(index); //返回列表中指定位置的元素intindexOf(object); //返回此列表中第一次出现的指定元素的索引,没有返回-1intlastIndexOf(object); //返回此列表中最后一次出现的指定元素的索引没有返回-1ListsubList(intfrom,intto); //获取子集包含头不包含尾。3. Set集合Set集合与Collection基本上一样只不过内部元素是无序的不允许重复。Add之前会判断(equals方法)集合中是否包含此元素如果包含返回true丙存入集合如果不包含返回false不存。n 1HashSet按hash算法来存储集合中的元素因此具有良好的存取和查找功能。l 特点? 不保证顺序。? 不是同步的? 集合元素可以是nulll 判断元素是否相等? 判断hash值是否相等? Equals判断内容是否相等n 1TreeSet按存储集合中的元素的compare或者比较器来判断是否需添加到集合。l 特点? 自然顺序或指定顺序。? 不是同步的? 集合元素可以是nulll 判断元素是否相等? 判断hash值是否相等? Equals判断内容是否相等3.1.LinkedHashSet的集合特点是HashSet的一个子类也是根据元素的hash值来判断元素位置但同时使用链表维护元素次序。由于需要维护次序所以性能略低于hashSet但在迭代访问集合元素时将有很好的性能。【有序不许重复】3.2. 常用共性方法1增加元素booleanadd(Object obj);//添加一个元素在末尾位置booleanaddAll(Collection c);//添加一个集合在末尾位置2删除元素booleanremove(Object obj);//删除一个元素。booleanremoveAll(Collection c)//删除包含c的元素。voidclear();//移除此集合的的所有元素3判断元素booleancontains(Object obj)//判断是否包含某个元素。booleancontainsAll(Collection c);//在此集合中包含集合c中的所有元素booleanisEmpty();//判断是否为空集合。4获取元素intsize();//获取size大小。Iteratoriterator();//迭代器用于取出元素的。配合it.next()和hasNext()组合使用。3.3.Hash表确定元素是否相同1判断两个原素的hash值是否相同如果相同个判断两个内容是否相同2判断hash值相同之前这块不是很理解后来java培训学习时突然就想通了其实是判断hashCode()是否相同,判断内容用equals()方法。n hashCode规则l 同一个对象多次调用返回的hashCode值相等。l 2个对象euqals方法比较返回true时他们hashCode也应相等。l 对象中用作equals方法比较标准的field都应用来计算hashCode值n 重写hashDode规则l 把每个对象的有意义的field计算出一个hashcode值。l 用第一步计算出来的多个hashCode来组合成一个值返回。l 为了避免相加产生偶然相等。可以通过hashcode*一个质数相加返回。例如Return name.hashCode*11 age.hashCode*7;练习请定义ArryaList集合并存储Person对象。如newPerson(lisi,20);并取出。将姓名和年龄打印出来。3.4.TreeeSet排序的2种方式1 让对象本身具备可比性。实现comparable接口的comparTo()方法。2 创建比较器。比较器实现Compartor接口Compar()方法作为TreeSet对象的构造参数象传入。注意泛型。3 建议用第二种使用灵活· publicstaticvoidmain(String[] args) {TreeSet ts newTreeSet(newComparator() {publicintcompare(Person o1, Person o2) {returno1.getAge()-o2.getAge();}});ts.add(newPerson(mike,28));ts.add(newPerson(lisi,21));ts.add(newPerson(zhouqi,29));ts.add(newPerson(zhaoliu,25));ts.add(newPerson(wangu,24));for(Object o: ts) {Person p (Person) o;System.out.println(p.getName() \t p.getAge());}}3.5. 选择HashSet还是TreeSet?HashSet的性能总是比TreeSet好(主要表现在添加、删除、查询等)因为TreeSet需要二外的红黑树来维护次序。只有当需要排序时才使用TreeSet。HashSet有一个子类LinkedSet对于普通测插入删除这个要比HashSet要慢些。因为要维护链表。3.6. 安全问题解决通常在创建是就调用Collections工具类的synchronizedSortedSet方法来包装集合。例如Sorted s new Collections.synchronizedSortedSet(new Treeset(…))4. Map集合Map集合用于存储那些有映射关系的数据Map也成为双列集合。Map存的是一对元素一个Key一个Value。Key、Value可以使任何引用类型的数据。其中Map的Key不允许重复。4.1.Map集合子体系Map:|----HashMap:哈希表结构Key唯一不同步允许null作为键值。hashCode()、equals()确定唯一|----HashTable:哈希表结构数据唯一同步低效的。不允许null作为键null作为值。|----TreeMap:二叉树结构Key唯一可排序不同步但高效允许null作为键null作为值。补充4.2.Map常用方法1添加元素·value put(key,value):返回前一个和key关联的值如果没有返回null.2删除元素。void clear():清空集合。value remove(key):根据指定的key翻出这个键值对。3判断元素。boolean containsKey(key):判断是否包含给定的keyboolean containsValue(value):判断是否包含给定的valueboolean isEmpty();判断集合是否为空4获取元素。value get(key):通过键获取值如果没有该键返回null。可以用来来判断是否包含指定键。int size():获取键值对的个数。4.3.Collection和Collectionscollection是集合框架的顶层接口集成了一些集合的共性方法;添加、删除、修改、查询、判断等。下分为list和set两个分支其又各自有体系其中list有序可以重复的有分为vector arraylistlinkedlist(各个数据结构特点)其中set是无序不许重复的有分为。hashset和treeset(各个数据结构特点)Collections是一个对collection操作的工具类提供的都是静态方法(查找排序反转加锁)