Java学习笔记六 常用API对象二
1、基本数据类型对象包装类:见下图
- public class Test {
- public static void main(String[] args){
- Demo();
- toStringDemo();
- jdkDemo();
- }
- private static void jdkDemo() {
- //注意:在1.5之后的版本中可以使用下面的形式 简化书写 ,这是版本升级的一个方面
- Integer i=3; //自动装箱,jdk是Integer i = Integer.valueOf(3);
- i=i+3; //自动拆箱,
- /*注意:和用new生成对象的小区别是,
- * 简写书写时如果数值在一个字节以内(即<128)时,重复生成不产生新空间
- */
- Integer a=127;
- Integer b=127;
- System.out.println(a==b);
- System.out.println(a.equals(b));
- Integer c=128;
- Integer d=128;
- System.out.println(c==d);
- System.out.println(c.equals(d));
- }
- static void Demo(){
- /*1、获取对象包装器类,以Integer为例:
- * 最简单的是使用new,可以传入一个本类的基本数据和""包含的本类基本数据
- * 注意:如果""中包含的不是本类基本数据会抛出一个运行时异常
- */
- Integer a=new Integer(3);
- Integer b=new Integer("3");
- //2、也可以使用静态方法valueOf()来获取对象包装类对象实例
- // Integer c=Integer.valueOf("3");
- // Integer d=Integer.valueOf("3", 10); //第二个参数指定进制
- // Integer e=Integer.valueOf(3); //这是1.5版本后新增的
- //3、当然也可以将包装类对象转换为基本类型,注意不仅可以是本类基本类型,还可以是其他基本类型(但不是所有的)
- // int f=a.intValue();
- // byte g=a.byteValue();
- //4、基本类型封装成对象之后的比较
- System.out.println(a==b); //比较地址
- System.out.println(a.equals(b)); //比较是否相等
- System.out.println(a.compareTo(b)); //比较大小(根据字典顺序)
- }
- private static void toStringDemo() {
- //对象包装类的一个主要作用就是将基本数据类型和String类型互换
- //1、基本类型转换为String类型
- Integer i=new Integer(60);
- //使用静态方法
- System.out.println(Integer.toString(i));
- System.out.println(Integer.toString(i, 16));
- //
- System.out.println(i.toString());
- //Integer类还可以选择特定的进制进行转换,如2进制,8进制,16进制。是静态方法,内部调用toSting()
- System.out.println(Integer.toBinaryString(i));
- //2、String转换为基本类型
- String s="60";
- System.out.println(Integer.parseInt(s));
- //!!!下面的进制是将字符串当做该进制的数进行解析,返回一个10进制的数
- s="3c";
- System.out.println(Integer.parseInt(s,16));
- }
- }
基本类型对象包装类
参考:自动装箱
http://openhome.cc/Gossip/Java/AutoBoxUnBox.html
http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html
2、集合类:
!!!集合框架图:
Collection接口和List接口的方法:
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.ListIterator;
- public class CollectionInterface {
- public static void main(String[] args){
- Demo();
- iteratorDemo();
- listDemo();
- ListIteratorDemo();
- }
- public static void Demo() {
- ArrayList a1=new ArrayList();
- ArrayList a2=new ArrayList();
- a1.add("asd1");
- a1.add("asd2");
- a2.add("asd2");
- a2.add("asd3");
- System.out.println("a1="+a1);
- System.out.println("a2="+a2);
- //注意:addAll()会将指定集合所有对象都添加,即使用重复的也会添加
- a1.addAll(a2);
- System.out.println("a1="+a1);
- //注意:removeAll()会将指定集合所有对象都删除,!!!两者中共有的也会删除
- a1.removeAll(a2);
- System.out.println("a1="+a1);
- //retainAll()和removeAll()相反,会将指定集合所有对象都保存,而把其他全删除
- }
- public static void iteratorDemo() {
- ArrayList a1=new ArrayList();
- a1.add("asd1");
- a1.add("asd2");
- a1.add("asd3");
- a1.add("asd4");
- /*迭代器是集合容器用来取元素的方法,不同集合有不同的取法,所以具体的迭代器依赖于具体容器,
- * !!!Java只提供一个接口,每一个容器都需要将其作为 内部类 实现用以获取元素即可
- * 使用iterator()获取一个迭代器,并用该迭代器获取集合中对象,
- * 迭代器Iterator接口有三个方法:
- * 1、hasNext():检测是否有下一个元素,因为获取方法不检测是否超过集合容量,超过会报错
- * 2、next():获取下一个元素
- * 3、remove():删除元素
- */
- // Iterator i=a1.iterator();
- // while(i.hasNext()){
- // System.out.println(i.next());
- // }
- // !!!使用while循环的缺点是在循环遍历后,该迭代器已经不能去除任何值,但仍可以使用,浪费空间,可改为for循环
- for(Iterator i=a1.iterator();i.hasNext();){
- System.out.println(i.next());
- }
- }
- private static void listDemo() {
- //List集合的特有方法:由于List集合中元素有角标,!!!所以特殊方法就是利用角标来进行增删改查
- //注意 改 的方法在Collection中没有
- ArrayList a=new ArrayList();
- //普通添加和指定位置添加
- a.add("asd2");
- System.out.println("a="+a);
- a.add(0,"asd3");
- System.out.println("a="+a);
- //修改指定位置元素,set()返回值是原来该位置的元素
- System.out.println("被删除的元素是:"+a.set(0,"asd1"));
- System.out.println("a="+a);
- }
- private static void ListIteratorDemo() {
- ArrayList a1=new ArrayList();
- a1.add("asd1");
- a1.add("asd2");
- a1.add("asd3");
- // Iterator i=a1.iterator();
- // while(i.hasNext()){
- // Object obj=i.next();
- // if(obj=="asd3"){
- // a1.add("asd5");
- // }else{
- // System.out.println(i.next());
- // }
- // }
- /*在使用迭代器Iterator接口时,!!!不能同时进行增/删/改的操作,
- * 会报ConcurrentModificationException异常。
- * 可以使用子接口ListIterator接口代替,!!!由名字可以看出只在List集合中使用
- * ListIterator还允许逆向遍历List,使用hasPrevious()
- */
- ListIterator i=a1.listIterator();
- while(i.hasNext()){
- Object obj=i.next();
- if(obj=="asd3"){
- i.add("asd4");
- }else{
- System.out.println(i.next());
- }
- }
- System.out.println("a1="+a1);
- }
- }
Collection练习
下面是List接口的常用子类:
- public class Person implements Comparable<Person>{
- private int age;
- public Person(int age, String name) {
- super();
- this.age = age;
- this.name = name;
- }
- private String name;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- //这里的重写是为了HastSet练习使用
- @Override
- public int hashCode() {
- return name.hashCode()+age;
- }
- @Override
- public boolean equals(Object obj) {
- Person p=(Person)obj;
- return this.name.equals(p.name)&&(this.age==p.age);
- }
- //这里的 重写是为了TreeSet练习使用
- @Override
- public int compareTo(Person o) {
- //注意适用泛型后不需要在进行类型强转
- int count=0;
- if(o instanceof Person){
- Person p=(Person)o;
- // if(this.age>p.age){
- // return 1;
- // }else if(this.age<p.age){
- // return -1;
- // }else{
- // return this.name.compareTo(p.name);
- // }
- return count=this.age-p.age==0?this.name.compareTo(p.name):count;
- }
- return 0;
- }
- }
Person类
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.LinkedList;
- import com.lll.cn.Person;
- public class ListSubClassDemo {
- public static void main(String[] args){
- VectorDemo();
- LinkedListDemo();
- LinkedListTest();
- ArrayListDemo();
- }
- public static void VectorDemo() {
- //该类由于效率低下,和Enumeration一起不推荐使用
- }
- public static void LinkedListDemo() {
- /*LinkedList是链表结构,所以特殊方法是和第一个元素/最后一个元素相关
- * 如在第一个/最后一个位置添加元素,删除元素,获取元素等
- * !!!注意有些方法仅仅获取,有些是移除并返回
- * 注意:
- */
- LinkedList<String> l=new LinkedList<String>();
- l.add("asd2");
- l.add("asd3");
- l.addFirst("asd1");
- System.out.println("最后一个元素是"+l.getLast());
- while(!l.isEmpty()){
- System.out.println(l.removeFirst());
- }
- System.out.println(l);
- }
- public static void LinkedListTest() {
- /*使用LinkedList模拟堆栈和队列两种数据结构
- * 堆栈:先进后出First In Last Out -->FILO
- * 队列:先进先出First In First Out -->FIFO
- */
- StackDemo q=new StackDemo();
- q.myAdd("asd9");
- q.myAdd("asd2");
- q.myAdd("asd3");
- q.myAdd("asd4");
- System.out.println(q.myRemove());
- }
- private static void ArrayListDemo() {
- //ArrayList集合是最常用的的集合,并且通常用于存储自定义对象
- ArrayList<Person> a=new ArrayList<Person>();
- a.add(new Person(11,"asd1"));
- a.add(new Person(12,"asd2"));
- a.add(new Person(13,"asd3"));
- a.add(new Person(14,"asd4"));
- /*!!!注意在使用集合存储数据时的易错点
- * 1、所有自定义类型都会转换为Object类型,所以在使用时应该进行强制转换
- * 2、在一个循环中使用next()时应该小心,因为每次next()都会将指针向下移动而不再指向刚才对象
- * 下面就是错误示例
- */
- for (Iterator<Person> i = a.iterator(); i.hasNext();) {
- //System.out.println(i.next().getName()+i.next().getAge());
- Person p=(Person) i.next();
- System.out.println(p.getName()+":"+p.getAge());
- }
- }
- }
- class QueueDemo{
- private LinkedList<Person> l=null;
- QueueDemo(){
- l=new LinkedList<Person>();
- }
- public void myAdd(Person obj){
- l.add(obj);
- }
- public Object myRemove(){
- return l.removeFirst();
- }
- }
- class StackDemo{
- private LinkedList<String> l=null;
- StackDemo(){
- l=new LinkedList<String>();
- }
- public void myAdd(String obj){
- l.add(obj);
- }
- public Object myRemove(){
- return l.removeLast();
- }
- }
ListSubClassDemo练习
迭代器接口(Iterator):用于获取容器中的元素,是枚举类(Enumeration)的改进版,增加了删除功能并简化了书写。枚举类是伴随着Vector类的出现而出现的,也伴随着该类的改进(使用ArrayList代替)而被改进(使用Iterator代替)
链表和数组:
LinkedList特有方法:
Set常用子类:
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.LinkedHashSet;
- import java.util.TreeSet;
- import com.lll.cn.Person;
- public class SetSubDemo {
- public static void main(String[] args){
- HashSetDemo();
- HastSetTest();
- TreeSetDemo();
- }
- public static void HashSetDemo() {
- /*HashSet的底层结构仍是数组,但是有所改进:
- * 即存入数据时是根据哈希算法获取该数据的地址值,然后将其存入该地址
- * 特点:
- * 1、不允许存入相同元素,
- * 2、如果计算出两个相同地址值,会将后者进行修改后存储
- * 3、获取时计算地址值,如果该位置有元素且
- * !!!注意确定对象地址值的哈希算法就是对象内部的hashCode(),如果没有则使用继承自Object的
- * 所以要使用HashSet来存储数据,并保证其中的值唯一,应该修改hashCode()和equals()
- *
- * !!!在集合中对一个元素进行操作(例如remove,contains),首要的是判断在集合中是否有该对象,
- * 通常依靠的是equals()和hashCode()。所以使用自定义对象时,应该对这两个方法进行重写
- */
- }
- public static void HastSetTest() {
- HashSet<Person> hs=new HashSet<Person>();
- //如果自定义对象也要达到确保唯一性的要求,就要覆写hashCode()和equals(),原因见上
- hs.add(new Person(11,"asd1"));
- hs.add(new Person(12,"asd2"));
- hs.add(new Person(13,"asd3"));
- hs.add(new Person(14,"asd4"));
- hs.add(new Person(11,"asd1"));
- for (Iterator<Person> i = hs.iterator(); i.hasNext();) {
- Person obj = (Person) i.next();
- System.out.println(obj.getName()+":"+obj.getAge());
- }
- //HashSet还有一个子类LinkedHashSet,具有LinkedList和HashSet双重特性:即有序又唯一
- LinkedHashSet<Person> lhs=new LinkedHashSet<Person>();
- lhs.add(new Person(11,"asd1"));
- lhs.add(new Person(12,"asd2"));
- lhs.add(new Person(13,"asd3"));
- lhs.add(new Person(14,"asd4"));
- lhs.add(new Person(11,"asd1"));
- for (Iterator<Person> i = lhs.iterator(); i.hasNext();) {
- Person obj = (Person) i.next();
- System.out.println(obj.getName()+":"+obj.getAge());
- }
- }
- public static void TreeSetDemo() {
- /*TreeSet集合会对存入的对象进行比较然后进行存放,比较的过程可以用以下两种方式实现
- * 1、使对象实现Comparable借口,重写compareTo(),称为自然排序方法
- * 2、使集合具备排序功能,就是向TreeSet中传入一个实现了Comparator接口的类的对象实例
- */
- TreeSet<Person> ts=new TreeSet<Person>();
- ts.add(new Person(21,"asd1"));
- ts.add(new Person(22,"asd2"));
- ts.add(new Person(22,"asd3"));
- ts.add(new Person(24,"asd4"));
- for (Iterator<Person> i = ts.iterator(); i.hasNext();) {
- Person p = (Person) i.next();
- System.out.println(p.getName()+":"+p.getAge());
- }
- TreeSet<Person> ts2=new TreeSet<Person>(new ComparatorByName());
- ts2.add(new Person(21,"asd1"));
- ts2.add(new Person(22,"asd2"));
- ts2.add(new Person(22,"asd3"));
- ts2.add(new Person(24,"asd1"));
- for (Iterator<Person> i = ts2.iterator(); i.hasNext();) {
- Person p = (Person) i.next();
- System.out.println(p.getName()+":"+p.getAge());
- }
- }
- }
SetSubDemo练习
- import java.util.Comparator;
- import com.lll.cn.Person;
- public class ComparatorByName implements Comparator<Person>
- {
- //这个类是外部类,用于集合中元素的比较
- @Override
- public int compare(Person p1, Person p2)
- {
- int comp=0;
- return (comp=p1.getName().compareTo(p2.getName()))!=0?comp:p1.getAge()-p2.getAge();
- //return 1;
- }
- }
TreeSet比较使用的类
哈希如何判断元素相等:
二叉树:会用自然排序或自定义排序方法进行排序,取出时按排好的顺序从左到右取出。但是并不意味着必须是从小到大的顺序,因为如果左边第一个是最大的,就是从大到小取。当然也可以有序存取(即先存先取/后存后取)
集合总结:
1、选择集合容器的技巧
2、集合容器体系和数据结构区分
Java学习笔记六 常用API对象二的更多相关文章
- Java学习笔记五 常用API对象一
常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...
- Java学习笔记七 常用API对象三
一.泛型:简单说就是对对象类型进行限定的技术 public class GenericDemo { public static void main(String[] args){ /*泛型作为1.5版 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- Activiti学习笔记5 — 常用API解析
常用API解析: 一.ProcessEngineConfiguration 流程引擎配置对象(配置数据库连接4个大配置和建表策略) 二.ProcessEngine 流程引擎核心对象( ...
- Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别
1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...
- Java基础学习笔记十三 常用API之正则表达式、Date、DateFormat、Calendar
正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ...
- Java学习笔记5(API)
Java API API(Application Programming Interface)指的是应用程序编程接口. String类 String初始化有两种,一个是使用字符串常量初始化一个Stri ...
- Java学习笔记(七)——对象
一.类与对象 1.类的定义 类就是模型,确定对象将会拥有的特征(属性)和行为(方法). 2.类的特点 (1)类是对象的类型 (2)具有相同属性和方法的一组对象的集合. 3.对象的属性: 对象具有的各种 ...
随机推荐
- hbase启动报错
前一段时间vmware上的ubuntu的hbase用不了了,而hadoop能正常的操作,非常的奇怪. 错误信息好像是connect fail, RPC什么的,看来跟网路有关. 想起以前曾经解决过hba ...
- JVM学习心得
出处:http://blog.csdn.net/qq_16143915/article/details/51195438 一.JAVA内存管理与GC机制 Java在JVM所虚拟出的内存环境中执行,ja ...
- BNU 34974 MATLAB大法好
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=34974 MATLAB大法好 Time Limit: 8000ms Memory Limi ...
- [Java开发之路](6)File类的使用
1. 构造方法 构造方法 描写叙述 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建一个新的文件实例. File(String parent , String ...
- android事件学习
一.android处理事件有两种形式. 1.基于监听的事件处理,就是通过setXxxListenter()进行处理的. 2.基于回调的事件处理,就是View类内部的onTouchEvent(),一般是 ...
- Go 编码问题的解决方案
1.首先需要mahonia 这个包 go get github.com/axgle/mahonia 然后新建一个 func src 字符串 srcCode 字符串当前编码 tagCode 要转换的编码 ...
- Java基础算法
i++;++i; i--;--i; int a=5;int b=a++;++放在后面,表示先使用a的值,a再加1b=5,a=a+1,a=6 int c=5;int d=++c;++放在前面,表示先将c ...
- webstorm配置less解析的方法
1.安装node.js 2.npm 安装less, npm install -g less 2.1 lessc style.less styles.css 编译 2.2 lessc –clean-cs ...
- BZOJ3645: Maze(FFT多项式快速幂)
Description 众维拉先后在中土大陆上创造了精灵.人类以及矮人,其中矮人是生性喜好常年居住在地下的洞穴的存在,他们挖掘矿物甚至宝石,甚至用他们的勤劳勇敢智慧在地底下创造出了辉煌宏大的宫殿,错综 ...
- Perl线程介绍
Perl 中的线程 本文首先概述了线程的概念和意义,接着回顾了 Perl 语言中对线程支持的演化历史,然后通过一系列示例重点介绍了 Perl 中线程的实现,数据的共享以及线程间的同步,最后归纳并总结了 ...