- 浏览: 583472 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
maleking:
太感谢了。新手搭建hadoop集群环境,dat ...
启动hadoop后没有datanodes的问题 -
system_mush:
NoClassDefFoundError: com/google/common/collect/Maps -
di1984HIT:
呵呵,我学习一下。
Katta源码分析 -
di1984HIT:
呵呵, 不管怎么说,挺好的。
zookeeper3.3学习笔记2:配置参数介绍 -
zoezhang:
谢谢了,可以解决
maven2报cannot be cast to javax.servlet.Filter错误解决
一、数组、集合
数组、集合:都是一种容器,用一个对象管理多个对象;
数组:不能自动增长;只能存放同类型的元素
集合:能自动扩容;部分集合允许存放不同类型的元素;
二、学习这些集合类要掌握哪些东西:
1)怎样得到(选择)集合对象;
2)怎样添加元素
3)怎样删除元素
4)怎样循环遍历没一个元素
三、list、set、map
collection:父接口;
Set:接口 ---一个实现类: HashSet
List:接口---三个实现类: LinkedList,Vector,ArrayList
SortedSet:接口---实现类:TreeSet
1、List:
List:有序列表,允许存放重复的元素;
实现类:
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;下标也是从0开始;
LinkedList:链表实现,增删快,查询慢
Vector:数组实现,线程安全,重量级
2.Set:
无序集合,不允许存放重复的元素;
实现类 HashSet:equals返回true,hashCode返回相同的整数;哈希表;
子接口SortedSet:对Set排序 实现类 :TreeSet:二叉树实现的;
看API:<E> 泛型:表示一个对象;
Iterator:接口,迭代器;
java.util;
hasNext();
next();
remove();
Iterable:可迭代的,访问的 ;
java.lang;实现了可迭代的接口就可以用迭代的方式访问;
只需实现 iterator();方法即可;Iterator iterator();
三种循环的访问方式:
for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); }
|
Iterator it=list.iterator(); while(it.hasNext()){ System.out.println(it.next()); }
|
for--each 循环: for(Object obj:list){ System.out.println(obj); }
|
只有实现了Iterable接口的才能用第三种;能用第二种的也一定能用第三种;
ArrayList:自动扩容,是数组照搬过来的;
3.Map
HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;
HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问;
如果有两个Key重复,那么会覆盖之前的;
Hashtable:线程安全的
Properties:java.util.Properties; key和value都是String类型,用来读配置文件;
HashMap与Hashtable区别:
HashMap线程不安全的,允许null作为key或value;
Hashtable线程安全的,不允许null作为key或value;
TreeMap: 对key排好序的Map; key 就是TreeSet, value对应每个key;
key要实现Comparable接口或TreeMap有自己的构造器;
HashSet:remove(Object o)的原则看这个对象O的Hashcode和equals是否相等,并不是看是不是一个对象;
定义一个Map; key是课程名称,value是Integer表示选课人数;
map.put(cou,map.get(cou)+new Integer(1));
四、Hashtable、Properties
1,Hashtable:实现了Map接口,此类实现一个哈希表,作用和HashMap相同。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 法。
2,Properties:继承自Hashtable,比 Hashtable 更严格 属性列表中每个键及其对应值都是一个字符串。
常用方法 String getProperty(String?key) 和 setProperty(String key,String value);
用法:我在C盘下建了一个名为 yy.dat 的文件,文件的内容为:
name=hehe
password=12345
执行以下程序,输出 hehe,可见用 Properties 可以很方便的解析配置文件
Properties p = new Properties();
p.load(new FileInputStream("C:\\yy.dat"));
System.out.println(p.getProperty("name"))
五、两个工具类 Arrays 和 Collections
1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂
2.Collections、主要提供了在 collection 上进行操作的静态方法
六、遗留的几个类
1.Hashtable, 作用和HashMap相同,不过它是线程安全的,如果不需要线程安全,应该使用HashMap
2.Enumeration, 遗留集合使用枚举接口来遍历元素,它有两个方法, hasMoreElements和nextElement,用法类似Iterator。
3.Stack,继承自Vector,实现了栈的功能,提供了push()方法押栈 和pop()方法出栈。
4.BitSet, 位集。如果需要高效率的存储一个位序列,例如一个标志序列,请使用位集。它可以对各个位进行
读取 get(i)
设置 set(i)
清楚 clear(i)
举个例子:
view plaincopy to clipboardprint? 1. import java.util.*; 2. /** *计算2到200万之间的素数,而且速度超快 3. 4. 5. public class Sieve { 6. public static void main(String[] s) { 7. int n = 2000000; 8. long start = System.currentTimeMillis(); 9. BitSet b = new BitSet(n + 1); 10. int count = 0; 11. int i; 12. for (i = 2; i <= n; i++) 13. b.set(i); 14. i = 2; 15. while (i * i <= n) { 16. if (b.get(i)) { 17. count++; 18. int k = 2 * i; 19. while (k <= n) { 20. b.clear(k); 21. k += i; 22. } 23. } 24. i++; 25. } 26. while (i <= n) { 27. if (b.get(i)) 28. count++; 29. i++; 30. } 31. long end = System.currentTimeMillis(); 32. System.out.println(count + " primes"); 33. System.out.println((end - start) + " milliseconds"); 34. } 35. }
|
import java.util.*; /** * 计算2到200万之间的素数,而且速度超快 */ public class Sieve { public static void main(String[] s) { int n = 2000000; long start = System.currentTimeMillis(); BitSet b = new BitSet(n + 1); int count = 0; int i; for (i = 2; i <= n; i++) b.set(i); i = 2; while (i * i <= n) { if (b.get(i)) { count++; int k = 2 * i; while (k <= n) { b.clear(k); k += i; } } i++; } while (i <= n) { if (b.get(i)) count++; i++; } long end = System.currentTimeMillis(); System.out.println(count + " primes"); System.out.println((end - start) + " milliseconds"); } }
|
七、常见笔试题目汇总
1.Collection 和 Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
2.List, Set, Map是否继承自Collection接口?
List,Set是,Map不是
3.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。
4.你所知道的集合类都有哪些?主要方法?
最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
5.排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序
从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点
把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点
递归地使用快速排序方法对left 进行排序
递归地使用快速排序方法对right 进行排序
所得结果为l e f t + m i d d l e + r i g h t
6.HashMap 和Hashtable 的区别
都属于Map 接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个null 键和多个null 值。
Hashtable 类似于HashMap,但是不允许null 键和null 值。它也比HashMap 慢,因为它是同步的。
7.Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用= =还是equals()? 它们有何区别?
Set 里的元素是不能重复的,那么用iterator()方法来区分重复与否。
equals()是判读两个Set 是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
8.介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
Collection
├List(以特定次序来持有元素,可有重复元素)
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set(无法拥有重复元素,内部排序)
Map(保存key-value值,value可多值)
├Hashtable
├HashMap
└WeakHashMap
Collections是针对集合类的一个帮助类
package com.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class TestCollection {
static String a="a";
static String g="q";
static String q="w";
static String w="g";
static String z="n";
public static void main(String args[]){
Collection<String> c=new HashSet<String>();
c.add(a);
c.add(g);
c.add(w);
c.add(z);
System.out.println(c);
Collection<String> d=new ArrayList<String>(c);
boolean b=c.contains("a");
System.out.println(b);
Iterator<String> iterator=c.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("---------1---------");
for(Iterator<String> i=c.iterator();i.hasNext();){
System.out.println(i.next());
}
System.out.println("---------2---------");
for(String word:c){
System.out.println(word);
}
System.out.println("---------3---------");
}
}
发表评论
-
hbase 压缩
2012-06-14 21:53 2032Hbase有两种压缩策略:minor和major。M ... -
InputStream与Reader
2011-07-04 10:14 1126InputStream/OutputStream:1)是所 ... -
file的getPath getAbsolutePath和getCanonicalPath的不同
2011-05-18 10:31 822file的这几个取得path ... -
Class.getResourceAsStream 和 ClassLoader.getResourceAsStream
2011-01-10 11:18 923这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要 ... -
JAVA语法总结 - 内部类
2010-12-28 21:20 9281、内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。 ... -
java匿名内部类的使用场景
2010-12-28 13:14 1490幕后英雄的用武之地 ... -
Integer.parseInt()和这个Integer.valueOf()的区别
2010-12-28 10:46 1605static int parseInt(String s) ... -
几个方法的学习
2010-12-26 16:04 1019java.awt.Component ... -
自我参考:Java学习的30个目标
2010-12-19 01:59 13531.你需要精通面向对象 ... -
使用JFrame创建窗口
2010-12-19 01:34 1300Java.swing包中的JFrame类对于创建窗口很有效 ... -
Java中使窗口无标题栏并全屏幕显示
2010-12-19 01:29 2360首先我们来看一下如何让窗口(比如说JFrame)的标题栏不显示 ... -
如何才算掌握Java(J2SE篇)
2010-12-16 16:13 1010时常看到一些 ... -
Java String和Date转换
2010-12-14 08:07 956/** SimpleDateForma ... -
Java Swing 带分隔条的面板
2010-12-08 10:29 3757import java.awt.*;import java ... -
标记接口
2010-11-30 10:41 1594标记接口:普通的接口的通常目的是保证类实现了某个或某组方法。而 ... -
Java final修饰形参
2010-11-25 01:04 1448final修饰基本类型(int,double,...) ... -
正则表达式入门
2010-11-21 11:48 1180众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ...
相关推荐
《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了规范Java开发过程、提升代码质量和开发效率而发布的一份权威指南。这份手册详细列出了Java开发中应遵循的最佳实践、编程规约和技术规范,旨在打造高效、可...
《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了提升Java编程规范和代码质量而制定的一份详尽指南。这份手册涵盖了多个关键领域的最佳实践,旨在帮助开发者遵循一致的编码标准,提高代码可读性、可维护性和...
阿里巴巴Java开发手册(终极版)是一本针对Java开发者的规范化指导手册,由阿里巴巴集团技术团队编写,目的是为了帮助Java开发者提高代码质量和开发效率。手册内容丰富,涵盖了编程规约、异常日志、单元测试、安全...
《阿里巴巴Java开发手册 终极版》是一份详尽的编程规范文档,旨在提升Java开发的质量和效率,它凝聚了阿里巴巴集团多年来的开发经验与智慧。这份手册面向全球Java开发者,无论你是初学者还是资深工程师,都能从中...
《阿里巴巴Java开发手册终极版》是Java开发者们的重要参考资料,它凝聚了阿里巴巴集团在长期的软件开发实践中积累的经验和智慧。这份手册旨在提高代码质量、提升团队协作效率,同时也是培养良好编程习惯的重要工具。...
《阿里巴巴Java开发手册终极版v1.3.0》是一份详尽的编程规范文档,旨在为Java开发者提供一套统一的编码标准,以提升代码的可读性、可维护性和团队协作效率。这份规范不仅涵盖了基础的编程约定,还包含了最佳实践和...
《阿里巴巴Java开发手册(终极版)》是一本深入探讨Java编程规范的重要参考资料,旨在提升Java开发者们的编程质量,促进团队间的协作效率,并为构建高效、稳定的软件系统提供基础。手册内容广泛,涵盖了从基本语法到...
终极版是阿里Java开发手册的最新版本,它结合了之前的版本精华,并根据最新的技术发展进行了更新。比如,针对Java 8及更高版本的新特性,如Lambda表达式、Stream API等,提供了详细的使用指导。此外,还涵盖了...
4. **集合框架**:Java集合框架是编程中不可或缺的部分,可能包含ArrayList、LinkedList、HashSet、HashMap等容器的使用、泛型、迭代器、流API等内容。 5. **IO流**:讲解输入输出流的概念,包括字节流和字符流、...
《阿里巴巴Java开发手册终极版》是阿里巴巴集团针对Java开发者推出的一份权威指南,旨在提高团队开发效率、保证代码质量和系统稳定性。这份手册凝聚了阿里巴巴多年Java开发经验的结晶,覆盖了编码规范、设计原则、...
- **手册目的**:本手册旨在总结阿里巴巴技术团队多年来的实战经验和最佳实践,以指导Java开发者编写高质量的代码,提升软件产品的整体质量和开发效率。 - **覆盖范围**:手册内容涉及多个方面,包括但不限于编程...
《阿里巴巴Java开发手册》终极版1.3.1是一份重要的技术文档,它凝聚了阿里巴巴集团内部技术团队的丰富经验和专业智慧。这份手册不仅适用于初入职场的Java开发者,也对有经验的工程师有着极高的参考价值。其核心目标...
《阿里巴巴Java开发文档终极版》是一份非常权威且全面的编程指南,专为Java开发者设计,旨在提升代码质量、优化开发流程以及确保团队间的代码一致性。这份文档深受业界认可,体现了阿里巴巴作为全球知名互联网公司在...
《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了提升Java开发的规范性和效率而编撰的一份重要指南。这份手册包含了丰富的Java编程最佳实践,旨在帮助开发者遵循一套统一的标准,提高代码质量和可维护性。...
《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了提升Java开发的规范性和效率,结合多年的企业级开发经验所推出的权威指南。这份手册涵盖了从基础编码规范、异常处理、并发编程到系统设计等多个方面的内容,...
《阿里巴巴Java开发手册终极版v1.3.0》是阿里巴巴集团为了规范Java开发流程、提升代码质量和团队协作效率而发布的官方指南。这份手册详细涵盖了Java编程中的各种最佳实践、编码规范、设计原则以及系统架构方面的指导...