- 浏览: 32924 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
hyjasonlee:
birthday 为Date 能取数据出来吗?我用sqlite ...
利用dbutils框架简化jdbc开发
----------------------------android培训、java培训、期待与您交流!----------------------------------
感想:
1.学到了很多细节的地方,现在不仅知道了如何去运用集合,而且对它们的底层细节又有了很多的了解!
总结:
1.常用方法:
去交集:boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。换句话说,移除此 collection 中未包含在指
定 collection 中的所有元素。
2.iterator
是集合中的私有的内部类,通过暴露出方法来操作它。
3.List
特有方法,凡是可以操作角标的方法都是该体系的特有方法。 set(int index, E element)用指定元素替换列
表中指定位置的元素(可选操作)。
参数: index - 要替换的元素的索引 element - 要在指定位置存储的元素 返回: 以前在指定位置的元素
重点:
- List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。 因为ConcurrentModificationException
异常。 所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的, 只能对元素进行判断,取出,删
除的操作, 如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。 该接口只能通过List集合的
listIterator方法获取。
- ArrayList 不是线程同步的
- Vector 是线程同步的 但是最好也不要用,可以用ArrayList 加锁
- ArrayList 构造出一个长度为10的空列表
/* 使用LinkedList模拟一个堆栈或者队列数据结构。 堆栈:先进后出 如同一个杯子。 队列:先进先出 First in First out FIFO 如同一个水管。 */ import java.util.*; class DuiLie { private LinkedList link; DuiLie() { link = new LinkedList(); } public void myAdd(Object obj) { link.addFirst(obj); } public Object myGet() { return link.removeFirst();//队列 return link.removeLast();//堆栈 } public boolean isNull() { return link.isEmpty(); } } class LinkedListTest { public static void main(String[] args) { DuiLie dl = new DuiLie(); dl.myAdd("java01"); dl.myAdd("java02"); dl.myAdd("java03"); dl.myAdd("java04"); while(!dl.isNull()) { System.out.println(dl.myGet()); } } }
import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。 比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。 思路: 1,对人描述,将数据封装进人对象。 2,定义容器,将人存入。 3,取出。 List集合判断元素是否相同,依据是元素的equals方法。 所以要重写Person类的equals方法 */ class Person { private String name; private int age; Person(String name,int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if(!(obj instanceof Person)) return false; Person p = (Person)obj; //System.out.println(this.name+"....."+p.name); return this.name.equals(p.name) && this.age == p.age; } /**/ public String getName() { return name; } public int getAge() { return age; } } class ArrayListTest2 { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(new Demo()); al.add(new Person("lisi01",30));//al.add(Object obj);//Object obj = new Person("lisi01",30); //al.add(new Person("lisi02",32)); al.add(new Person("lisi02",32)); al.add(new Person("lisi04",35)); al.add(new Person("lisi03",33)); //al.add(new Person("lisi04",35)); //al = singleElement(al); sop("remove 03 :"+al.remove(new Person("lisi03",33)));//remove方法底层也是依赖于元素的equals方法。 Iterator it = al.iterator(); while(it.hasNext()) { Person p = (Person)it.next(); sop(p.getName()+"::"+p.getAge()); } } public static ArrayList singleElement(ArrayList al) { //定义一个临时容器。 ArrayList newAl = new ArrayList(); Iterator it = al.iterator(); while(it.hasNext()) { Object obj = it.next(); if(!newAl.contains(obj)) newAl.add(obj); } return newAl; } }
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
|--TreeSet:
Set集合的功能和Collection是一致的。
重点:
arraylist删除元素依赖于equals
HashSet删除元素依赖于hashcode和equals
import java.util.*; /* Set:无序,不可以重复元素。 |--HashSet:数据结构是哈希表。线程是非同步的。 保证元素唯一性的原理:判断元素的hashCode值是否相同。 如果相同,还会继续判断元素的equals方法,是否为true。 |--TreeSet:可以对Set集合中的元素进行排序。 底层数据结构是二叉树。 保证元素唯一性的依据: compareTo方法return 0. TreeSet排序的第一种方式:让元素自身具备比较性。 元素需要实现Comparable接口,覆盖compareTo方法。 也种方式也成为元素的自然顺序,或者叫做默认顺序。 TreeSet的第二种排序方式。 当元素自身不具备比较性时,或者具备的比较性不是所需要的。 这时就需要让集合自身具备比较性。 在集合初始化时,就有了比较方式。 需求: 往TreeSet集合中存储自定义对象学生。 想按照学生的年龄进行排序。 记住,排序时,当主要条件相同时,一定判断一下次要条件。 */ class TreeSetDemo { public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(new Student("lisi02",22)); ts.add(new Student("lisi007",20)); ts.add(new Student("lisi09",19)); ts.add(new Student("lisi08",19)); //ts.add(new Student("lisi007",20)); //ts.add(new Student("lisi01",40)); Iterator it = ts.iterator(); while(it.hasNext()) { Student stu = (Student)it.next(); System.out.println(stu.getName()+"..."+stu.getAge()); } } } class Student implements Comparable//该接口强制让学生具备比较性。 { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Object obj) { //return 0; if(!(obj instanceof Student)) throw new RuntimeException("不是学生对象"); Student s = (Student)obj; System.out.println(this.name+"....compareto....."+s.name); if(this.age>s.age) return 1; if(this.age==s.age) { return this.name.compareTo(s.name); } return -1; /**/ } public String getName() { return name; } public int getAge() { return age; } }
import java.util.*; /* 当元素自身不具备比较性,或者具备的比较性不是所需要的。 这时需要让容器自身具备比较性。 定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。 当两种排序都存在时,以比较器为主。 定义一个类,实现Comparator接口,覆盖compare方法。 */ class Student implements Comparable//该接口强制让学生具备比较性。 { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Object obj) { //return 0; if(!(obj instanceof Student)) throw new RuntimeException("不是学生对象"); Student s = (Student)obj; //System.out.println(this.name+"....compareto....."+s.name); if(this.age>s.age) return 1; if(this.age==s.age) { return this.name.compareTo(s.name); } return -1; /**/ } public String getName() { return name; } public int getAge() { return age; } } class TreeSetDemo2 { public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(new Student("lisi02",22)); ts.add(new Student("lisi02",21)); ts.add(new Student("lisi007",20)); ts.add(new Student("lisi09",19)); ts.add(new Student("lisi06",18)); ts.add(new Student("lisi06",18)); ts.add(new Student("lisi007",29)); //ts.add(new Student("lisi007",20)); //ts.add(new Student("lisi01",40)); Iterator it = ts.iterator(); while(it.hasNext()) { Student stu = (Student)it.next(); System.out.println(stu.getName()+"..."+stu.getAge()); } } } class MyCompare implements Comparator { public int compare(Object o1,Object o2) { Student s1 = (Student)o1; Student s2 = (Student)o2; int num = s1.getName().compareTo(s2.getName()); if(num==0) { return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())); /* if(s1.getAge()>s2.getAge()) return 1; if(s1.getAge()==s2.getAge()) return 0; return -1; */ } return num; } }
//泛型类定义的泛型,在整个类中有效。如果被方法使用,
//那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
//
//为了让不同方法可以操作不同类型,而且类型还不确定。
//那么可以将泛型定义在方法上。
/*
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
? 通配符。也可以理解为占位符。
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
Map
|--HashMap:底层是哈希表。非同步。可以允许null作为键值。
|--TreeMap:底层是二叉树,非同步。可以对map集合中键进行排序 。
|--Hashtable:哈希表。同步。被HashMap替代了。不允许null作为键值。
看到Array:就是数组结构。
看到link:就是链表。
看到hash:就是哈希表结构。就要想到hashCode和equals方法。
看到tree:就要想到二叉树,就要想到排序。就要想到Comparable 和Comparator接口。
什么时候用map集合?当对象间存在映射关系时,就要想要map集合。
hashmap
public V put(K key,V value)在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替
换。
返回:
与 key 关联的旧值;如果 key 没有任何映射关系,则返回 null。(返回 null 还可能表示该映射之前将 null 与 key 关
联。)
----------------------------android培训、java培训、期待与您交流!----------------------------------
发表评论
-
黑马程序员_javaweb(response)
2012-12-02 21:29 762----------------------------and ... -
黑马程序员_javaweb(servletcontext)
2012-12-02 21:21 802----------------------------and ... -
黑马程序员_交通灯系统和银行调度系统
2012-12-02 21:07 673----------------------------and ... -
黑马程序员_高新技术
2012-12-02 10:08 771----------------------------and ... -
黑马程序员_基础复习八(网络编程)
2012-11-29 23:48 890----------------------------and ... -
黑马程序员_基础复习七(IO)
2012-11-28 22:59 621----------------------------and ... -
黑马程序员_基础复习五(线程)
2012-11-25 18:17 717----------------------------and ... -
黑马程序员_基础复习四(异常)
2012-11-24 22:04 692----------------------------an ... -
黑马程序员_基础复习三(内部类、接口)
2012-11-23 08:22 754----------------------------and ... -
黑马程序员_基础复习二(面向对象、多态)
2012-11-19 21:06 559----------------------------and ... -
黑马程序员_基础复习一(数组、排序、面向对象)
2012-11-16 00:08 618----------------------------and ...
相关推荐
在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...
本资料包是黑马程序员提供的详细教程,涵盖了Java集合的例题、源码以及配套的PPT教学文档,旨在帮助学习者深入理解和掌握Java集合的使用。 首先,我们来探讨Java集合框架的基本概念。Java集合框架包括接口和实现类...
Java基础知识点总结 本文将对Java基础知识点进行总结,涵盖了变量、数据输入、数组、方法、封装、API、字符串、ArrayList、继承、多态等方面的重要概念。 变量和数据输入 在Java中,变量是存储数据的容器。变量的...
《黑马程序员Java面试宝典》是一本...通过《黑马程序员Java面试宝典》的学习,你可以系统地复习和掌握这些知识点,提高自己的面试竞争力。书中的问题和解答将帮助你更好地理解Java编程的本质,提升在面试中的自信心。
《Java基础入门(第3版)》是一本针对Java初学者的教材,其课后答案文档提供了对书中习题的解答,旨在帮助读者巩固所学知识。Java是一种面向对象的编程语言,具备跨平台性,由Java虚拟机(JVM)负责解释执行。Java...
《黑马程序员JAVA面试宝典2018年5月最新版》是一本专门为Java开发者准备的面试指南,它集合了2018年5月时最新的面试知识点和业界趋势,旨在帮助Java程序员在求职过程中更好地应对各类技术面试。这本书可能涵盖了Java...
这个复习资料主要涵盖了Eclipse的使用、程序的断点调试、Eclipse常用快捷键、JUnit测试框架、Java 5的新特性(静态导入和自动装箱拆箱)以及增强for循环和可变参数等知识点。 1. **Eclipse的使用**: Eclipse是一...
通过学习《黑马程序员面试宝典》,开发者不仅可以深入理解Java的核心概念和技术,还能了解企业在招聘时关注的热点问题,从而有针对性地进行复习和准备。这份资料提供的面试真题解析更是能帮助开发者模拟实战,提前...
### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机执行一系列任务的过程。 2. **Java语言概述,历史、特点** - **概述**:Java是一种...
首先,Python的基础知识是理解其语法结构,包括变量、数据类型(如整型、浮点型、字符串、布尔型、列表、元组、字典和集合)、流程控制(如条件语句、循环语句、异常处理)以及函数的使用。Python的模块化设计允许...
《2018-2019年黑马最新版Java程序员面试宝典+题库pdf》是一份集合了近年来Java编程领域重点知识和面试常见问题的综合资源。这份资料主要针对初级Java程序员,旨在帮助他们巩固基础知识,掌握面试技巧,以便在求职...
在Java开发的世界里,扎实的基础是每一位程序员的基石。本篇将围绕"java视频教程_黑马Java零基础辅导班[第二期]11天课件源码"这一主题,深入探讨在学习Java过程中所涉及的重要知识点,通过分析提供的课件源码,旨在...
【传智播客PPT】是一份集合了多种IT技术领域的教学资料,主要涵盖了Java基础、JDBC数据库操作以及SSH(Struts、Spring、Hibernate)三大框架等内容。这些PPT资源是传智播客教育机构精心制作的,旨在帮助学习者深入...
【标题】:“黑马视频笔记集锦”是一份针对Android开发者的资源集合,它包含了大量从黑马程序员教育平台精心整理的视频学习笔记。这份资源旨在帮助Android爱好者高效地掌握编程技能,减少在学习过程中的摸索时间,...
本文将为你提供一份详尽的Java基础知识概述,适合初学者和有经验的开发者作为复习材料。 1. Java基础语法 Java的基础语法是编程的基础,理解和掌握它至关重要。 1.1 注释 注释是程序员为了方便理解和维护代码而...
传智播客是知名的IT教育品牌,其“黑马程序员”系列课程在行业内享有较高的声誉,为许多初学者和进阶者提供了丰富的学习资源。 【描述】"市面最新,请各位慢用" 暗示这是一套较新的Java教学资料,涵盖了最新的技术...
结合上下文,我们可以推测这是“黑马程序员”或其他类似机构的入学测试题目集合。 【文件内容】:由于给出的压缩包文件列表只有一个名为“测试.txt”的文件,我们可以假设这是一份文本文件,其中包含了具体的测试...
本文主要针对Hadoop相关知识进行总结,涵盖了大数据的基本特征、Hadoop组件、Hadoop集群...以上内容是对Hadoop及其生态系统相关知识的概述,涵盖了从基础概念到具体操作的多个方面,是Hadoop期末复习的重要参考资料。
《JavaWeb程序设计任务教程(第2版)》课后答案-docx文档是一份针对该教程中课后习题的详细解答集合。该文档以Microsoft Word的.docx格式呈现,包含了教程中每一章节后的练习题及其相应的解答。 二、适用人群 学生...