黑马程序员——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集合中的键进行排序。
添加相同的键,值会被最后的添加的值覆盖
Map和Set很像。其实Set底层就是使用了Map集合。
map集合的两种取出方式:
(1)keyset:将map中所有的键存入到Set集合,用set集合迭代方式取出所有的键,在获取每一个键对应的值.
(2)entrySet
将Map集合中的映射关系取出
这个关系就是Map.Entry类型。Entry是Map的内部接口。那么关系对象Map.Entry获取到后,就可以通过Map.Entry中getKey和getValue方法获取关系中的键和值。
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
- 黑马程序员——java常用类、框架
- 黑马程序员——Java集合框架
- 黑马程序员——Java集合框架
- 黑马程序员——java集合框架
- 黑马程序员——java-集合框架
- 黑马程序员——JAVA集合框架
- 黑马程序员——java集合框架
- 黑马程序员——Java集合框架
- 黑马程序员——Java集合框架
- 黑马程序员—java集合框架应用
- 黑马程序员—java集合框架
- 黑马程序员—Java集合框架(LinkedList)
- 黑马程序员—java集合框架整理
- 黑马程序员—Java集合框架
- 黑马程序员——java常用api
- 黑马程序员——Java常用对象
- 黑马程序员——Java常用API
- 黑马程序员——OC学习之Foundation框架常用类的常用方法
- memcache(使用telnet操作)
- 中国网游与音视频通讯结合带来的机遇
- UIImage 转换成 NSString注意事项
- struts2框架处理步骤
- java一次性查询几十万,几百万数据解决办法
- 黑马程序员——java常用类、框架
- java设计模式之建造者模式
- .Net面试知识
- 获取手机信息<uses-permission android:name="android.permission.READ_PHONE_STATE" />
- 《Effective STL》读书笔记一:Item 1(小心选择容器) Item 2(当心容器无关代码的假象)
- cocos2d-x锚点在Sprite与Layer上移动定位不一样的问题。
- Canvas绘图(各种图片的绘制)
- 黑马程序员——java IO
- 使用exe4j 制作java启动程序的 等候界面