JAVASE集合超完整讲义
- 格式:doc
- 大小:328.50 KB
- 文档页数:9
集合(就是装东西的容器):分为两类|——Collection|——MapCollection接口方法摘要:(抽象方法,实现类都有(ArrayList,LinkedList,HashSet,TreeSet))注意方法的参数类型和返回值!!!List集合——线性表数据结构(有序,可重复)|——ArrayList——底层是动态数组:更适合读取和存储数据ArrayList会初始化一个数组,当要存放的元素数量大于数组时,ArrayList会自动扩容数组度。
ArrayList 返回的字符串格式为:[元素1.toString(),元素2.toString(),....]会顺序调用集合中每个元素的toString方法,并拼接在一起。
|——LinkedList——底层是链表:更适合插入和删除元素接下来用ArrayList演示List的常用方法:接下来看看contains(有用到equals方法)方法:remove方法也是如此,需要用集合中元素自己的equals方法比较,有这个元素就删除掉。
所以要想得到我们想要的结果,一定要注意重写元素自己的equals方法!!!!还有下面的removeAll,retainAll方法也是这样!!!集合中储存的元素不是基本数据类型,字符串的时候,集合不知道该如何去比较元素的大小,当我们需要用到比较集合中的元素时,我们需要重写equals方法List接口中定义的独有方法(因为List有下标,所以有这些方法)Object get(int index)获取给定索引出的元素Object set(int index,Object obj)将给定的元素存入集合指定位置set方法的返回值为被替换的元素set方法指定的索引位置不能大于数组的元素数量,否则会出现下标越界异常add(int index,Object obj)向集合指定位置插入元素(原来的元素向后移)remove(int index)删除指定位置的元素其他方法:List<E> subList(int fromIndex,int toIndex)获取子ListList的排序:List是有下标的,可以对存放的元素进行排序,但因为存放的东西各种各样,还有自定义的对象,所以集合本身并不知道按照怎样的规则来排序,JDK中为我们定义了Comparable(意思是:可比较的)接口(此接口强行对实现它的每个类的对象进行整体排序),我们只要实现这个接口的compareTo(T o)方法(中文意思是和参数o比较),便可以拟定我们自己的大小规则,从而实现排序的目的!返回的值大于0,则表示当前对象大于参数对象小于小于等于等于注意,compareTo方法的调用是这个样子的:当前对象.compareTo(参数对象)使用范例:我定义了一个类Point,并且定义一个List集合来装Point对象,现在我要对这个集合进行排序,按照“从小到大”排序步骤是:1、Point类要实现Comparable接口,并重写接口里的抽象方法compareTo,同时重写equals方法2、调用Collections.sort(List<T> list)方法对List进行排序如下图代码:1、Point类的设置:2、main方法:注意!!!Collection是所有List集合和Set集合的顶级父类接口,而Collections是工具类,要想使用Collections.sort进行集合排序(只能对List排序),该集合中的元素必须有指定比较器,例如上面Point类中重写的compareTo就是个比较器。
Java SE集合的图书管理系统功能说明图书管理系统一、需求说明1、功能:登录,注册,忘记密码,管理员管理,图书管理。
2、管理员管理:管理员的增删改查。
3、图书管理:图书的增删改查。
4、管理员属性包括:id,姓名,性别,年龄,家庭住址,手机号码,登录名称,登录密码,状态。
5、图书属性包括:id,图书名称,作者,单价,出版社,出版日期,类别。
6、技术:通过用集合来模拟数据库实现该系统,建议采用List集合实现,集合模拟数据库只是一个数据的临时保存。
二、功能说明1、注册功能描述:注册需要用户输入所有的必须的用户信息。
Id:用户输入,但是不能有相同,而且只能是数字姓名:不能为空。
性别:必填,只能是男或女。
年龄:必填,只能是数字而且限制在1-100。
手机号码:必填,必须都是数字而且是11位。
登录名称:必填,有字母、数字、特殊字符组成,不能以数字开头,长度在3-8位,而且不能有重复的登录名称。
登录密码:不能与登陆名称相同,而且必须是6-12位。
状态:用户只有三种状态,1表示正常2表示禁用3表示离职,默认情况下用户状态为1。
2、登陆功能登陆时必须输入登录名称和密码、验证码,当用户名和密码,验证码都正确时而且用户状态为1则登录成功,否则进行相关信息的提示。
3、忘记密码根据用id去查找密码,并提示用户修改密码,如果用户选择修改则进行密码修改否则退出该功能。
修改密码要求:不能与旧密码相同,而且要符合不能与登陆名称相同,而且必须是6-12位。
4、管理员管理(1)前提条件:只有登录成功才可以进行对管理员的操作。
(2)功能分为:增加、删除、修改、查询管理员。
①增加:参考管理员的注册功能。
②删除:根据管理员的ID进行删除,删除时需要判断id编号是否存在,存在则删除并提示用户删除结果,否则则提示用户id编号不存在,重新输入。
③修改:先根据用户id编号查询用户信息,然后再进行修改,修改时同样需要对输入的信息进行判断,修改成功则覆盖原先用户数据。
Java SE进阶-05-集合1.纲要a)主要集合概述b)Collection 和Iteratorc)Listd)Sete)Mapf)Collections 工具类g)Comparable 与Comparator集合继承结构图_Collection 部分集合继承结构图_Map 部分TreeMapPropertiesHashtableHashMap<<Interface>>SortedMap<<Interface>>Map灰色部分已经不建议使用CollectionsPropertiesStack<<Interface>>EnumerationHashtableTreeSet HashMapHashSetVectorLinkedListArrayList<<Interface>>SortedSet<<Interface>>Set<<Interface>>List<<Interface>>ListIteratorTreeMap<<Interface>>SortedMap<<Interface>>Map<<Interface>>Collection<<Interface>>IteratorHashMap的key部分的元素无序不可重复。
key部分就是一个HashSet,底层采用哈希表数据结构。
特点:存储元素的方式成对儿存储,以Key和Value的方式存储。
key部分的元素“无序不可重复”。
所以key部分等同可以看做Set集合。
Map中key起决定性作用。
key部分特点:无序不可重复,但是存储的元素可以按照元素大小顺序自动排列。
Hashtable是线程安全的,效率低,用的比较少。
凯哥学堂班级:19班姓名:星空日期:2018年8月25日课程:javaSE (集合框架)集合框架:大数值计算:就好比小学的时候学习的加法运算,个位跟个位对其,十位跟十位相加,百位跟百位相加,相加时逢10进1。
首先用两个集合,把组数组放入集合中,先压进去的是高位,所以高位在最下面的位置,低位最后压进去再最高(最先出站进行运算),只要满足10就进位,每出站一次运算一次。
步骤:先申请2个字符串,把要计算的数值存放到字符串中,然后申请两个数组,将字符串的转换成数组,拆分进行存储。
接着申请2个集合,把数组里面的数值用循环添加到集合之中(进站),这样一来高位就在下面,个位就在上面。
我们先问一下2个集合那个大?按照最大的集合循环,申请一个int 进位存储。
最后是取值,在循环中申请2个变量,开始出站操作,每出一个转换成Integer类型,写上异常处理,如果没有值可以取出就报异常错误(分开写的用处,2个集合长度不一样)。
开始计算,计算结果大于等于10整除10,就是逢10 进1,不大于10不追加。
最后字符串颠倒输出出去。
集合工具类:排序:按照ASCII进行排序。
混排:每次打印的结果都不一样。
颠倒:搜索:搜索出来告诉下标数。
拷贝:覆盖,集合进行覆盖前面的集合。
最大值最小值:泛型:不说明泛型就是Object类型。
就是用来说明类型。
在集合中非常多,用于控制集合存储类型,作用是:说明存放的是什么类型。
<T>可以写多个<extends String>这里说明类型只能是String或者String子类。
也可以在方法上声明泛型。
泛型是程序设计语言的一种特性。
允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。
各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。
将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。
泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
JAVASE基础知识-图文1、课程名称:JAVASE基础知识2、知识点2.1、上次课程的主要知识点1、在Oracle的学习之中有以下几点必须重点掌握:·数据的查询和更新操作、事务处理;·表的建立、约束的使用、序列的使用;·表的设计范式应该是理解。
2.2、本次预计讲解的知识点1、JAVA学习层次;2、Java简介及JDK的安装及配置;3、JavaSE的基础程序设计;4、数组及方法的使用。
3、具体内容3.1、Java的学习层次从程序的开发来讲,Java语言是整个JAVAEE体系的核心基础部分,在这一部分之中,只有将核心概念掌握透彻了,知识点的学习:可以根据每一个关键字或者是知识点,联想到其所对应的程序及其概念,以及各个注意事项。
在整个JAVA基础部分之中,有以下三个主要部分组成:·JAVASE的基础部分:基本程序的一个恢复以及数组及方法的使用;·JavaSE的面向对象:此部分概念很多,而且必须全部记下;·JavaSE的应用部分:类集、IO、类库、JDBC等等。
才有可能为以后的学习提供方便。
其他的有许多的了解部分:多线程、网络编程;理解的部分:JavaSE1.5的提供的各种新特性。
在以上的所有知识之中按照重要性来讲,一共有如下几部分:·面向对象:所讲解的一切都是为了抽象类和接口服务的;·类集部分:为数据结构实现;·IO:面向对象的完美体现;·JDBC:为以后的JAVAEE开发做准备呢。
3.2、Java简介(理解)Java:是一门编程语言,而且现在已经形成了一自己的一套完整的开发体系,被大多数的公司所支持,所以现在的Java从整个行业发展来讲,Java平台、.NET平台、AdobeFLE某等已经算是将编程霸占的已经足够多了,因为这些公司·.NET:微软支持;·FLE某:Adobe公司支持;·Java:Oracle/SUN支持、IBM、HP等公司支持。
一、Collection集合类的方法(带all方法的参数都为集合)添加和删除方法: Add() addAll() remove() removeAll()两个集合中的相同元素从调用removeall的方法中删除 clear()判断方法返回boolean:contains(元素) cotainsAll() isEmpty()其他方法Size() iterator()返回Iterator类型的迭代器retainAll()取交集与removeAll中的方法相反。
toArray()转数组一、List1.特点:有序(存入和取出的元素顺序一致)都有索引,可以重复(set相反)2.常用方法:添加删除传下标值:add(int index, E element)也可以直接addaddAll(int index, Collection c)也可以最直接添加集合Remove可以传下标也可以传元素(移除第一次出现的)判断:boolean equals()当且仅当指定的对象也是一个列表、两个列表有相同的大小,并且两个列表中的所有相应的元素相等才返回 true修改:set(int index, E element)替换制定位置的元素获取:get(int index),subList(int fromIndex, int toIndex)indexOf(Object o)返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1lastIndexOf(Object o)最后出现的,没有返回-1一、Vector特点:内部是数组结构,同步,增删查询都很慢,内部数据数组的大小为 10超出后100%的增长二、ArrayList特点:内部数组,不同步的代替了vector大小可变数组(创建一个数组将原来的数组复制到新数组中来)查询速度很快。
初始容量为 10 的数组超出后50%的增长Contains方法判断元素是否相同实际走的是equals方法重点案例:保证元素的唯一性。
通过重写hashCode ()方法和equals()方法Arraylist中去除重复的元素比较重复元素的时候先使用hashCode(),如果相等再判断equals()是否相等,如果为true则元素重复。
三、linklist特点:内部是链表的数据结构不同步,增删速度很快方法addFirst(E e)addLast(E e)add方法里面有具体操作位置的返回void类型反之返回boolean类型的。
offer默认插入到末尾offerFirst,offerLast,offer都有返回值PeekFrist(Last)和getFirst(Last)如果为空前者(jdk1.6)返回null而后者会抛出异常。
Pool(jdk1.6)移除poolFirst,poolLast和removeFirst和removeLast区别和上面一样。
类似的还有添加pool(jdk1.6)和add的区别与上同理。
面试题:队列FIFO 链表: FILO二、Set元素不重复,无序。
方法:和其父类方法完全一致。
一、HashSet特点:内部数据结构是哈希表,不同步。
性能很稳定,线程不安全存储速度快哈希算法能够给每个对象算出一个哈希值,哈希值指向某些地址,所以查找起来非常方便。
判断元素是否相同首先判断哈希值是否相同,如果相同就进行第二次判断看内容是否相同(用的是equals方法)。
1.LinkedHashset具有可预知的迭代顺序二、TreeSet特点:有指定顺序即按照元素的字典顺序来排序,不同步的。
判断是否相同的原理就是看返回值是否为0Comparable接口对实现它的每个对象进行整体的排序即自然排序。
小于大于等于分别返回负数正数和0案例一实现comparable接口自定义比较-----让元素自身具备比较功能在TreeSet里面存放一些person对象ts.add(new Person("zhanag",29));对存放的对象要求按照年龄来排序如果年龄相同按照姓名来排序。
方法,Person类实现conmarable接口重写compareTo方法然后迭代取出值:按照姓名如果姓名相同按照年龄排序案例二让集合具备比价功能实现Comparactor比较器接口将该类的对象作为参数传递给TreeSet集合的构造函数Comparactor新建集合的时候创建一个建立排序类的参数。
二、Map集合特点:键值对的映射集合,每次存储一个键值对,值可以重复键是不可以重复方法:1.put()添加元素有一个返回值,返回值得类型是值的类型,put(1,2)再次put(1,4)的时候2会被4替代返回的是被替代的值4。
2判断:containsKey(传递键)containsValue(传递的值)3判断集合中是否含有键值对isEmpty()。
4 containsKey 判断有没有这个键5 containsValue 判断有没有这个值6 keySet 键存储到Set集合7 entrySet 键值关系对象存储到Set集合重点:取出map集合的键值对由于map集合中没有迭代器,只能使用其他方法来获取方法1,利用Set集合进行获取Map接口中有一个方法,keySet() 将Map集合中的所有的键,存储到Set集合有了Set集合以后,迭代器Set集合,Set里面存储的都是键代码://使用Map集合的keySet方法,将Map集合中的键,存储到Set集合Set<String> set = map.keySet();//创建迭代器,迭代Set集合Iterator<String> it = set.iterator();while(it.hasNext()){//it.next()方法,获取的是什么,是键String key = it.next();//使用map中get方法获取值Integer value = map.get(key);System.out.println(key+"..."+value);}第二种方法,利用的键值对的映射关系来获取,好比通过结婚证,获得证上的两个人有一个接口,用来描述键值对的映射关系对象的代码://使用entrySet方法,获取键值对关系对象的Set集合Set<Map.Entry<String, Integer>> set = map.entrySet();//建立迭代器Iterator<Map.Entry<String, Integer>> it = set.iterator();while(it.hasNext()){//it.next()获取到的是什么呢,是键值对映射对象Map.EntryMap.Entry<String, Integer> entry = it.next();//有了键值对关系对象,getKey getValueString key = entry.getKey();Integer value = entry.getValue();System.out.println(key+"..."+value);}2.1、HashMap底层也是哈希表结构线程不安全的,执行效率快任何,包含null,可以存储null键,和null值HashMap存储自定义对象,并采用两种方法获取2.2、Hashtable底层也是哈希表结构,但是不存null值,null键Hashtable是线程安全的,执行效率低Hashtable JDK1.0开始类似于 Vector2.2.1、properties2.3、TreeMap可以对键进行自然顺序的排序,可以实现Comparactor接口Properties 类表示了一个持久的属性集。
与IO流配合使用。
值都是String由于Properties 继承于 Hashtable,所以 put 和 putAll 方法也能进行插入操作。
但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。
相反,应该使用 setProperty 方法。
同理取值也是一样的用getProperty(setProperty(get)两个方法固定只能存String类型的值)获取系统的属性也可获取单一的通过键去拿值2. Map集合|-- Map接口中的方法put 存储,键值对get 获取,根据键获取值containsKey 判断有没有这个键containsValue 判断有没有这个值keySet 键存储到Set集合entrySet 键值关系对象存储到Set集合3. HashMap|-- 底层哈希表,线程不安全,允许存储null|-- 存储自定义对象,重写hashCode 和 equals4. TreeMap|-- 红黑树,线程不安全|-- 存储自定义对象,重写compareTo方法|-- 传递比较器5. Hashtable|-- 线程安全的哈希表,不允许null多学一招:LinkedHashSet LinkHashMap 有序的set和有序的map,怎么存怎么取三、泛型Jdk1.5之后出现的,将运行时期出现的类型转换异常(存不同类型的数据)转换到了编译时期,泛型是给编译器使用的技术,用于编译时期,运行时会将泛型去掉生成.class文件这种机制叫做泛型的擦除。
目的是为了兼容类加载器。
在运行时不需要强转(如:迭代器获取的时候),是泛型的补偿机制为了避免安全隐患的出现在定义集合的时候就规定集合的类型(数组定义的时候要加类型int[]arr)3.1自定义泛型,了解读懂就行,就是为了安全性。
3.2泛型的方法和泛型类(Demo1代码),泛型接口:了解。
3.2.1泛型类3.2.2静态的方法泛型写在static的后面非静态的泛型方法3.2.3泛型接口1.子类实现后,直接,确定了数据类型2.子类实现后,不实现泛型,不指定数据类型,等到建立子类对象的时候,在指定泛型GenericDemo1.java GenericDemo2.java3.3泛型的通配符参照addAll(Collection<? extends E> c)其中问号也是通配符//可以迭代每个集合的方法,其中问号就是通配符,可以匹配任意的集合类型。
private static void method(Collection<?> c){Iterator<?> it = c.iterator();//不要进行强制转换while(it.hasNext()){System.out.println(it.next());}3.4泛型的限定上限限定:? extends E限定E类型,和E的子类类型,下限限定:?super E 限定了E的父类性,可以传递E类型,E的父类类型,下限限定Eg:private static void method(ArrayList<? extends Company> array){四、Collections工具类特点: Collections操作集合的工具类,方法全部静态,类名调用方法:1.Static sort(List )对List集合排序2.static sort(List Comparator)按照指定的比较器,进行排序myStringLength为自定义的类实现comparactor接口可以按照长度进行排序,第二个方法是逆转长度排序static Comparetor reverseOrder()运行结果是一个比较器,强行逆转对象的自然顺序(Comparable)需要和sort配合使用3.static reverseOrder(Comparator<T> cmp) 传递比较器,强行逆转比较器4.static int binarySearch(List,关键字)二分查找法array是一个集合,该语句的原理是查找集合中为2的元素的角标,如果没有返回负的插入点减一(先排序好的集合)。