黑马程序员——java常用类、框架

来源:互联网 发布:电脑怎么搜淘宝直播间 编辑:程序博客网 时间:2024/06/06 03:13

                             ---------- android培训、java培训、java学习型技术博客、期待与您交流! ----------
 

 

字符串方面有String类,它是不可变的。还有StringBuffer、StringBuilder来构建字符串,是可变的,里面提供了很多方法,它们两者的区别是一个是线程安全的,一个是线程不安全的。

String中常见的用法是获取、判断、转换、切割、替换、比较、取出空格。后两个的常用操作是添加、喊出、修改。

System:描述系统一些信息。方法和属性都是静态的。

Runtime对象:该类并没有提供构造函数。它不可以new对象。那么直接想到该类中的方法都是静态的。发现该类中还有非静态方法。说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。由这个特点可以看出该类使用了单例设计模式完成。

    其他的对象还有Date、Calendar、Math、Random。

集合框架:

Collection

    |--List:元素是有序的,元素可以重复。因为该集合体系有索引

           |--ArrayList:底层的数据结构使用的是数组结构。

                      特点:查询速度很快,但是增删稍慢。线程不同步

遍历可使用Interator和自身的get(int index)方法

           |--LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。

           |--Vector:底层是数组数据结构。线程同步,速度较慢。被ArrayList代替了。

Vector中有个枚举遍历Vector,现在已被Interator代替

        |--Set:元素是无需的(存入和取出的顺序不一定一致),元素不可以重复

           |--HashSet:数据结构是哈希表。线程是非同步的。

                                 保证元素唯一性的原理:判断元素的hashCode值是否相同。

                                如果相同,还会判断元素的equals方法,是否为true。

           |--TreeSet:可以对Set集合中的元素进行排序。默认按照字母顺序排序

                                  主要条件相同时,要比较次要条件

                                 数据结构是二叉树,-1的话,存在左侧,1则存在右侧,0的话就不存入

                                  遍历是 中序遍历,即先遍历root节点的左侧,然后是root,最后是右侧

TreeSet排序

第一种方式方式.让元素自身具备比较性.元素需要实现Comparable接口,覆盖compareTo方法.

    第二种排序方式.当元素自身不具备比较性时,或者具备的比较性不是所需要的.这时就需要让集合自身具备比较性,传递一个Comparator对象.

    在集合初始化时.就有了比较方式

当两种排序都存在时.以比较器在为主.

/**

 * 保证元素唯一性的证据:Comparable接口的compareTo方法return 0。

 * 主要条件相同时,要比较次要条件

 * 二叉树,中序遍历

 * 

 * Comparator:让集合有比较性

 * 在集合初始化时,就有了比较方式

 */

public class Collection_5_TreeSet_Comparator {

public static void main(String[] args) {

TreeSet ts = new TreeSet(new Comparator(){

public int compare(Object o1, Object o2) {

if(!(o1 instanceof Student1) || !(o2 instanceof Student1)){

throw new RuntimeException("两者不是同类,不能对比");

}

//类型转换

Student1 s1 = (Student1)o1;

Student1 s2 = (Student1)o2;

//比较名字

int num = s1.getName().compareTo(s2.getName());

//名字相同,比较年龄

if(num==0){

num = new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));

}

return num;

}

});

ts.add(new Student1("lisi",40));

ts.add(new Student1("zhangsan",30));

ts.add(new Student1("wangwu",50));

ts.add(new Student1("liliu",60));

ts.add(new Student1("liliu",80));

System.out.println("共有"+ts.size()+"人");

for (Iterator iterator = ts.iterator(); iterator.hasNext();) {

Student1 object = (Student1) iterator.next();

System.out.println(object.getName()+"--"+object.getAge());

}

}

}

class Student1 {

private String name;

private int age;

public Student1(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public int getAge() {

return age;

}

}

 

 

    堆栈:先进后出 First in Last out    FILO 如同放在箱子里的东西

    队列:先进先出 First in First out   FIFO 如同汽车过隧道

    class DuiLie

    {

private LinkedList link;

DuiLie()

{

link = new LinkedList();

}

public void myAdd(Object obj)

{

link.addFirst(obj);

}

public Object myGet()

{

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());

            }

}

    }

Map

      |--Hashtable:底层是哈希表数据结构,不可以存入null键和null值。

                   该集合是线程同步的。jdk1.0

      |--HashMap:底层是哈希表数据结构,允许使用null键和null值。

                   该集合是不同步的。效率高。jdk1.2

      |--TreeMap:底层是二叉树数据结构。线程不同步。

                   可以用于给map集合中的键进行排序。

    添加相同的键,值会被最后的添加的值覆盖

    MapSet很像。其实Set底层就是使用了Map集合。

    map集合的两种取出方式:

    (1keyset:将map中所有的键存入到Set集合,用set集合迭代方式取出所有的键,在获取每一个键对应的值.

    (2)entrySet

    将Map集合中的映射关系取出

    这个关系就是Map.Entry类型。EntryMap的内部接口。那么关系对象Map.Entry获取到后,就可以通过Map.EntrygetKeygetValue方法获取关系中的键和值。

public class Map_2_Get {

public static void main(String[] args) {

Map<String,String> map = new HashMap<String, String>();

//添加元素

map.put("01""zhangsan1");

map.put("02""zhangsan2");

map.put("03""zhangsan3");

map.put("03""zhangsan33");

map.put("04""zhangsan4");

map.put(null"zhangsannull");

map.put("05"null);

int len = map.size();

System.out.println();

System.out.println("****遍历方法1*keySet****");

Set<String> set = map.keySet();

//迭代keySet,和Map的get方法获取

for(Iterator<String> it = set.iterator();it.hasNext();){

//for(String key : set){

System.out.println(map.get(/*key*/it.next()));

}

System.out.println("****遍历方法2*entrySet****");

Set<Map.Entry<String,String>> entry = map.entrySet();

for(Map.Entry<String, String> e : entry){

System.out.println(e.getValue());

}

}

}

/**

 * 练习:"sdfgzxcvasdfxcvdf"获取该字符串中的字母出现的次数。

 * 希望打印结果:a(1)c(2).....

 * 

 * 什么时候使用map集合呢?

 * 当数据之间存在映射关系时,可以选择map集合

 */

public class Map_4_Test {

public static void main(String[] args) {

Map<Character,Integer> hm = new   TreeMap<Character,Integer>();

//将字符串变成字符数组

char[] chs = "sdfgzxcvasdfxcvdf".toCharArray();

//遍历字符数组,查看以字符为key的键值对在不在,在的话加1,不在就存进去

for(char ch : chs){

if(hm.containsKey(ch)){

int value = hm.get(ch);

value = value+1;

hm.put(ch, value);

}else{

hm.put(ch, 1);

}

}

//遍历

Set<Map.Entry<Character,Integer>> entrySet = hm.entrySet();

for(Map.Entry<Character,Integer> entry : entrySet){

System.out.println(entry.getKey()+"="+entry.getValue());

}

}

}

 

 集合框架中的工具类
Collections
  对集合进行查找
  取出集合中的最大值,最小值
  对List集合进行排序

 

Arrays
  将数组转成List集合
  对数组进行排序
  对数组进行二分查找


 

个人总结:

    集合这部分内容挺多的,很常用。首先是学习了String,常用方法操作。然后是学习了List和Set,Map,弄懂了ArrayList和LinkedList的区别;

HashSet和TreeSet的区别;弄懂了hashcode和equals的作用,以及TreeSet排序的两种实现方法。学会了使用HashMap和TreeMap,同时也清楚了解

到Map和Set有什么关系。

                             ----------android培训、java培训、java学习型技术博客、期待与您交流! ----------


                                                         详细请查看:http://edu.csdn.net/heima

 

原创粉丝点击