JAVA 笔记(九)

  1. Iterator类中的next()是获取元素,并移动到下一个位置。[所以使用要小心,不要随便用,因为每次使用都是访问一个对象]返回类型是object真正是E(泛型)hasNext()如果仍有元素可以迭代就返回ture.
  2. 迭代器是依赖集合而存在的,否则没有意义。
  3. 集合的使用步骤;1.创建集合对象2.创建元素对象3.将元素添加到集合4.遍历集合(通过集合对象获取迭代器对象,再通过hasnext()和next()方法)
  4. 迭代器具体的实现类是真正的具体的子类中,以内部类的方式实现的。【这些集合相关的一般在util包中】。
  5. List(arraylist 、vector、linkedlist)集合是可以重复的并且是有序的(这里的有序是指如何顺序进就以如何顺序出,因为这样,就好像有了索引)而set(hashset,treeset)是不能有重复的元素。
  6. List集合特有的方法:可以在指定的位置添加元素(可以紧跟这一位,多了就会出现异常)。Set()修改元素【根据索引修改元素,返回被修改的元素】。
  7. List集合的特有遍历可以通过size()和get()方法完成。
  8. ListIterator(列表迭代器)继承了iterator,所以可以直接使用haxnext()和next()方法,进行遍历。它的特有功能可以逆向遍历(previous() 获取元素和hasprevious()判断是否有元素),但是该逆向遍历之前必须要进行正向遍历,否则没有意义(因为指针还是在起始处,没有动)
  9. 迭代器是依赖集合而存在的,集合中添加了数据,而迭代器却不知道,所以报错(并发修改异常)其实就是迭代器遍历元素的时候,通过集合是不能修改元素的。解决办法:A;迭代器迭代元素,迭代器修改元素【Listiterator】【该方法元素实在刚才迭代的元素后面的】。B;集合遍历元素,集合修改元素。(通过for循环)【该方法元素是最后添加的】
  10. 数组:查询快(通过索引)但是增加和删除复杂。链表:由一个链子把多个结点连接起来组成的数据(结点:有数据和地址组成(数据域和指针域,指针域里面是下一个元素的地址))。
  11. 链表查寻较慢,但是增加删除块。
  12. List的三个字类:arraylist(底层数据结构是数组,查询快,增删慢,线程不安全,效率高【异步】)vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低(现在很少用了,有替代的类)linkedlist:底层数据结构是链表,查寻慢,增删快,线程不安全,效率高)。
  13. Vector的特有功能:addelements()添加功能 elementat():获取元素的位置,elements()遍历。不过这些方法都被后来的替代了,很少用,了解即可。
  14. Linkedlist的addlast()方法和add()一样,没有什么特别之处,所以很少用。
  15. Contains()方法底层依赖equals()方法,所以比较内容的时候要重写equals()方法,否则默认调用父类object中的equals()方法,那么比较的就是地址值了。
  16. 集合添加的都是引用类型,我们有时看到的的是基本类型,其实是自动装箱了(valueof()方法可以将基本类型装换为包装类型)。
  17. 集合也模拟数组的的做法,在创建对象的时候明确元素的数据类型,这种技术就叫泛型技术。
  18. 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。【参数化类型】把类型当做参数一样传递。格式<数据类型>[这里的数据类型指的是引用类型]
  19. 泛型的好处:A;把运行期间的问题提前到了编译期间B;避免了强制类型转换C;优化了程序设计,避免了黄色警告。
  20. 早期的时候,我们用object类来代表任意类型,向上转型是没有问题的,但是向下就隐含了类型转换问题,所以并不安全,在jdk5之后就提出了泛型【提高程序的安全性】。
  21. 泛型定义在类中public class 类名<泛型类型,…..> 泛型定义在方法中public <泛型类型>返回类型 方法名<泛型类型> 【传什么就是什么类型】泛型定义在接口中:public interface 接口<泛型类型1,……>
  22. 泛型如果明确写的时候,等号两边的类型必须一致。
  23. 泛型高级:1.?:表示任意类型,如果没有明确,就是object类以及任意的java类。2.?extends E:向下限定,【E及其子类】3.? Super E:向上限定【E及其父类】。
  24. Jdk5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举。
  25. 增强for的格式for(元素数据类型 变量:数组或者集合){输出变量即可,变量就是元素。}
  26. 增强for的目标不能是null,否则会出错,所以使用增强for之前要判断是否为null.判断之后在使用。
  27. 其实增强for就是代替迭代器的。
  28. 静态导入:import static 包名…类名.方法名【直接导入到方法的级别】注意事项:方法必须是静态的,如果方法名称相同,要加前缀(这些东西很少用,了解即可)
  29. 可变参数的格式 修饰符 返回值类型 方法名(数据类型…变量名){}。注意:这里的变量底层其实是一个数组。如果一个方法有多个参数,可变参数一定是最后一个。
  30. Public static <t>List<t>asList(t…a)将数组变成一个集合,但是注意:虽然可以把数组变成集合,但是该集合的长度不可改变。所以添加和移除没用,但是修改可以。
  31. 去重代码(下面这个较为麻烦,很少使用,但是要了解它)

import java.util.ArrayList;

public class Demo {

public static void main(String[] args) {

ArrayList<String> list = new ArrayList<String>();

list.add("hello");list.add("world");list.add("java");

list.add("world");list.add("world");list.add("world");list.add("world");

list.add("java");list.add("hello");list.add("world");list.add("java");list.add("world");

for (int x = 0; x < list.size() - 1; x++) {

for (int y = x + 1; y < list.size(); y++) {

if (list.get(x).equals(list.get(y))) {

list.remove(y);

y--;// 这个地方要注意,如果元素相连并且相同,那么上一步虽然移除,但是下一个任然相同,这样就有漏网的,为了解决这个问题,让其减一,重新来一次就好了。

}

}

}

for (String s : list) {

System.out.println(s);

}

}

}

  1. 用Linkedlist模拟栈的数据结构的集合,这个封装的思想非常好,要学会其精髓。【虽然这样很少用,但是其思想很优秀】

package hhxu.lianxi;

import java.util.LinkedList;

public class UtilTest {

private LinkedList link;

public UtilTest() {

link=new LinkedList();//创建UtilTest对象的时候,其实是linkedlsit创建对象

}

public void add(Object obj){//增加

link.addFirst(obj);//方法体中调用的是linkedlist方法

}

public Object get(){//取出

return link.removeFirst();

}

public boolean isEmpty(){//判断是否为空

return link.isEmpty();

}

}

package hhxu.lianxi;

public class TestStack {

public static void main(String[] args) {

UtilTest ut=new UtilTest();

ut.add("hello");

ut.add("world");

ut.add("java");

while(!ut.isEmpty()){

System.out.println(ut.get());

}

}

}

  1. 包的划分原则:A;按功能分B;按模块分C;先按照模块分,再按照功能分。
  2. 记住一个原则:当参数较少时,就写参数传递,当参数较多时,就传一个对象。
  3. 多个对象共享一个成员变量的时候,要用静态的
  4. 循环里面如果有switch,并且在switch里面有break,那么结束的不是循环,而是switch语句。
  5. 不让别人创建对象就写构造方法为private 类名(){}。然后讲方法写成静态的即可。
  6. Set集合不能有重复的元素并且无序(存储顺序和取出顺序不一致)。注意;set集合虽然是无序的,但是作为集合它肯定有自己的存储顺序,假如你的顺序恰好跟其一样,属于巧合,不能代表其有序,多加几个数据就会发现结果。
  7. hashset为什么存储字符串的时候,字符串内容相同的只能存储一个?通过查看add方法的源码可知,其实这个方法的底层依赖hashcode()和equals()这两个方法:步骤:首先比较哈希值,如果相同,继续比较地址值或者equals(),如果不同接直接添加到集合中。按照方法的步骤来说:先看hashcode()的值是否相同,相同就比较equals()方法,返回ture,说明元素重复,就不添加,反之就添加。不同就直接添加。如果类没有重写这两个方法,默认就是object类中的,一般来说不相同,而string类重写了这两个方法,所以对于相同的元素只保留一个。【延伸:这样说明了一个问题,如果hashset集合出现了同样的元素的解决方法就是重写父类object中的hashcode()和equals()方法】。
  8. 不同元素的hashcode值一般不会相同,但是有时也会相同,这也是为什么比较hashcode()之后还要比较equls()的原因。
时间: 2024-10-13 23:45:51

JAVA 笔记(九)的相关文章

Java笔记九.常用APIの数据类型包装类

数据类型包装类 一.概述 Java对数据既提供基本数据的简单类型,也提供了相应的包装类.使用基本简单数据类型,可以改善系统的性能,也能够满足大多数应用需求.但是,简单类型不具有对象的特性,不能满足某些特殊的需求.比如Java中很多类的很多方法的参数类型都是对象,如Integer类来包装整数,我们可以使用Integer对象很容易地实现整数与字符串的转换. 二.Integer类(java.lang.Object ->java.lang.Number) 整数类包装的原始类型int对象的值,一个整数类型

Java 笔记(8)

JSP 技术 day8 JSP语法 + EL + JSTL day9 案例 2-3 个 综合小案例 day10 Servlet+JSP 综合练习 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP支持HTML语法,生成HTML方便. JSP技术与Servlet 技术区别和关系? JSP和Servlet技术都是用来动态生成网页的,Servlet不支持HTML语法,生成网页麻烦,JSP支持HTML语法,生

Java笔记(10)

第一天 ----- 第十天 知识点复习 day1 XML 语法和两种约束技术 1.XML语法写法.规范: 根元素必须唯一.元素名称与属性名称不能以数字开始.元素标记必须结束.元素不能交叉嵌套.属性值必须加引号(双引号.单引号) ----- 考试:排错 2.CDATA块 与 特殊字符转义在 使用上区别 ? <book> <p>标记的作用 </book>  ----- 标记内容 <p> 是一个特殊内容 CDATA : <book> <![CDA

Elasticsearch笔记九之优化

Elasticsearch笔记九之优化 优化从索引片段,内存设置,副本,分片,日志等方面入手.1:索引片段Es运行时会生成很多索引片段,执行查询时会打开这些索引片断.系统会限制打开索引片断的个数一旦超过这个个数限制就无法打开索引片断.我们可以通过命令来查看更改索引片断的限制数量.索引片断位置/usr/local/elasticsearch-1.4.4/data/elasticsearch/nodes/0/indices/shb01/0/index ulimit –a 查看索引片断数量,默认是10

15.1-全栈Java笔记:Java事件模型是什么?事件控制的过程有哪几步??

应用前边两节上一章节的内容,大家可以完成一个简单的界面,但是没有任何的功能,界面完全是静态的,如果要实现具体功能的话,必须要学习事件模型. 事件模型简介及常见事件模型 对于采用了图形用户界面的程序来说,事件控制是非常重要的. 一个源(事件源)产生一个事件并把它(事件对象)送到一个或多个监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事件. 一个事件源必须注册监听器以便监听器可以接收关于一个特定事件的通知. 每种类型的事件都有其自己的注册方法,一般形式为: v

13.1-全栈Java笔记:打飞机游戏实战项目|AWT技术|MyGameFrame

简介和项目目标 通过游戏项目学习整个Java基础知识体系,我们做了精心的设计,让每一章知识都能获得应用. 比如:多线程用来实现动画效果.容器实现对于多发炮弹的存取和处理.常用类等等的应用. 寓教于乐,让大家迅速入门,更希望通过喜闻乐见的小游戏,让大家爱上编程,爱上"程序员". 老鸟建议 很多朋友会疑惑:"游戏项目,又不能拿到企业面试中,为什么要讲?" 这是一种太过于功利的想法.就像,我们说:"今天吃个馒头,又不是长高,为什么要吃呢?" 游戏项目的

Java笔记---部署 JavaWeb 项目到云服务器

一.前言 前面我们已经尝过了在云服务器上部署代码的甜头了,现在主菜就要上场了,那就是将我们的 JavaWeb 项目部署到云服务器上.兴奋吧?淡定淡定~ 二.项目部署 我们对于 Java Web 项目在本地机器(无论是 Windows 还是 Linux)上的部署已经了然于心了,那么对于在云服务器上部署 Java Web 项目又是如何操作的呢? 其实很简单,还是离不开 Web 项目部署的那三点: ① 基础的 JDK 环境 ② 一个 Web 服务器.如 Tomcat.JBoss ③ 一款数据库.如:m

JAVA 笔记 七

JAVA笔记七 this:就代表本类的对象,this代表它所在函数所属对象的引用简单说:那个对象在调用this所在的函数,this就代表那个对象静态:static 用法:是一个修饰符,用于修饰成员(成员变量,成员函数)当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用.类名.静态成员static特点1.随着类的加载而加载2.优先于的对象存在3.被所有对象所共享4.可以直接被类名所调用实例变量和类变量的区别:1.存放位置. 类变量随着类的加载而存在与方法区中. 实例

JAVA笔记六

JAVA笔记总结六 把大象放入冰箱的几步: 面向对象的三个特征:封装,继承,多态 JAVA开发实际上就是找对象使用,没有对象就创建一个对象 找对象,建立对象,维护对象的关系 类和对象的关系:类是对现实生活中实物的描述: 对象就是这类事物,实实在在存在的个体 匿名对象:匿名对象可以作为参数进行传递也可以作为对象方法进行一次调用

老男孩培训视频听课笔记九(在51cto上听的)--5.8 64bit 基础优化

定时清理clientmqueue目录垃圾文件防止占满磁盘空间: /var/spool/clientmqueue  --这个目录会自动创建很多的文件,可以用下面的命令来清理 find /var/spool/clientmqueue/ –type  f | xargs rm –fr mkdir /server/scripts –p vim del.sh: find /var/spool/clientmqueue/ –type  f | xargs rm –fr crontab -e */5 * *