`
你是救世主
  • 浏览: 121332 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2010.12.08 java基础之 数组 和 集合

阅读更多

【面试问题一】:IBM面试
List的排序问题:
给定你一个list,里面放的都是string类型对象,按照string的第二字母来进行排序。
所涉及到的类主要有:
Collectionssort(List, Comparator)
【解释】:CollectionsArrays类是类似的,只不过一个操作集合,另外一个操作数组。
这个类是单独实现,继承自Object
可以实现,求最大,最小值,二分查找,生成“线程安全”的集合类。
都是静态的方法
collections】:这个单词的意思是:收集,集中在一起的人或物。
array】:数组,阵列,大堆,大群;有特指“数组”的意思。
Comparatorcompare(Object, Object)
【解释】comparable:可比较的,比得上的;
comparator】:比较器;在java中是一个接口;
可以使用匿名类的方法来进行实现,注意最后要加逗号。
compare函数有两个Object参数从来比较。
 
comparable】:这是另外一个实现比较的接口,但是一般的要比较的
对象来实现。
comparablecomparator的本质区别】:
Comparable是定义在集合内部实现的排序;
Comparator的定义在集合外部实现的排序。
两者实现的方法名和参数个数都不相同。
Comparable接口是定义在java.lang包中;
Comparator接口是定义在java.util包中。
Comparator比较灵活,可以实现多种排序方式。
【策略模式】:
comparator是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象
strategy object)来改变它的行为。
strategy】:名词:战略,策略,计谋;
concrete】:形容词:实体的,有形的,名词,动词,混凝土,使凝固;
理解的难点在于:不同的类可以生成不同的对象,如何动态调用?
比如多个收税方法,或多个比较器的比较函数。
【本质定义】:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。举例:comparator接口。
【本质实现】:分两步
(1) context(应用场景):
1,需要使用concreteStrategy提供的算法;
2,内部维护一个Strategy的实例;
3,负责动态设置运行时Strategy具体的算法实现;
4,负责跟Strategy之间的交互和数据交换;
(2) Strategy(抽象策略类):
1。定义了一个公共接口,各种不同的逻辑以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口。
ConcreteStrategy(具体策略类):
2,实现具体算法。
【本质优点】:提供了一种替代继承的方法,比继承更灵活,算法独立,可任意扩展。高内聚,低耦合。
【本质缺点】:每个策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
【主要代码如下】:

        Comparator c = new Comparator(){

            public int compare(Object o1, Object o2) {

                String s1 = (String)o1;

                String s2 = (String)o2;

                return s1.charAt(1)-s2.charAt(1);

            }

        };

        Collections.sort(list,c);
【面试问题二】:支付宝面试
listset的区别】:
最本质的区别总结为三点(1)list的元素是有顺序的,set没有顺序;(2)list可以包含重复的元素,set内不可能包含重复的元素;(3)两者都可以包含nulllist甚至可以包含多个nullset只能有一个null
Null我们理解为这个内存地址为00000000,意思是说没有内存地址;
ArrayListVector的本质区别】:
vector】:名词:矢量,向量的意思。
最本质区别:ArrayList不是线程安全的;Vector是线程安全的;
所以ArrayList的实现效率是更高的;
【集合中的各种类,以及他们之间的关系】:
ArrayList
包:java.util包;
父类:java.util.List;实际上,这是一个接口;
这个接口的主要实现类是【ArrayListVectorLinkedList】;
暂时,我们认为就是这三个类,以后再慢慢添加,别人都还没做过的东西,自己绝对不要去接触,太耽误时间。
LinkedList】:
这个类是包是:java.util父类也是List
Linked这个单词的意思是:链表,链接是意思;
List这个英文单词的意思是:目录,清单,一览表的意思;要从根本上去理解这个单词;深刻地去体会。
在本质上,这是一个链表,LinkedList.add(index, element),前面这个函数是linkedlist最大的优势。
在本质上,VectorArrayList都是数组实现的,索引快。
链表在指定位置插入、删除更快。
实际的用法可以一点一点添加。
HashMapHashtable的本质区别】
注意:HashTable的写法不对,t不应该大些;
HashMapHashtable的轻量级实现,非线程安全的实现,主要区别在于HashMap允许null的键或值,由于非线程安全,效率上可能高于HashtableHashMapHashtablecontains方法去掉了,改成了containsvaluecontainsKeyHashtableHashMap采用的hash/rehash算法都大概一样,所以性能不会有很多的差异。
HashMap => 不同步、空键值、效率高;
Hashtable => 同步、非空键值、效率略低
【如何将一个数组转换成list】:
Arrays:

<!--[if !supportLists]-->1.  <!--[endif]-->// array0中的第2个到第3个元素的值赋为8  

<!--[if !supportLists]-->2.  <!--[endif]-->        Arrays.fill(array0, 248);  

<!--[if !supportLists]-->1.   <!--[endif]--> // 对数组排序  

<!--[if !supportLists]-->2.   <!--[endif]-->        int[] array1 = new int[] { 783126354 };  

<!--[if !supportLists]-->3.   <!--[endif]-->        // 对数组的第2个到第6个元素进行排序  

<!--[if !supportLists]-->4.   <!--[endif]-->        Arrays.sort(array1, 27); 

【解释】:
fromIndex the index of the first element (inclusive) to be filled with the specified value
toIndex the index of the last element (exclusive) to be filled with the specified value
上面上句话解释了为什么是4为不是3
Arrays.binarySearch(array1, 8);
List list = Arrays.asList(a);
【重要发现】Arrays.toString(a):可以将整个数组中的元素打印出来。
Arrays.copyOf(a, 2);   可以实现对数组的拷贝、复制。
【解释】:2表示要拷贝的长度。
【浅拷贝与深拷贝的根本区别】:
ArrayList(Collection<? extends E> c):可以使用collection来构造ArrayList
浅拷贝是指:重新为list分配了内存;
深拷贝是指:list中的每个元素都进行了拷贝。为每个对象重新分配了内存。
【如何同步HashMap?】:
个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。
Java.util.Properties类是Hashtable的一个子类,设计用于String keysvalues
【迭代器】:
Java中的迭代器功能比较简单,并且只能单行移动;
(1)使用iterator()要求容器返回一个Iterator。第一次调用Iteratornext方法时,它返回序列的第一个元素;
(2)使用next()获得序列中的下一个元素;
(3)使用hasNext()检查序列中是否还有元素;使用remove将迭代器新返回的元素删除。
(4)list中有专门的ListIterator,可以从两个方向遍历List,也可以从List中插入和删除元素。
Set的功能方法】:
Set是一个interface:存入set的每个元素次序是唯一的,因为set不保存重复的元素。加入SetObject必须定义equals()方法以确保对象的唯一。SetCollection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet:为快速查找而设计的Set存入HashSet的对象必须定义hashCode()?????
TreeSet:保持次序的Set,底层为树结构。使用它可以从Set中提取有序序列。
LinkedHashSet:具有HashSet的查询速度,且内部使用链表来维护元素的顺序,插入的次序。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注重的是:生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并且定义compareTo()方法。
分享到:
评论

相关推荐

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    搜索“[Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(2/2)”可以下载另外一半 或者直接打开链接“http://download.csdn.net/detail/sfstream6/8240837” 目 录 第1 章 初识Visual Basic 2010...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    visual c# 2010新增了大量可圈可点的丰富特性,本书围绕着基础知识和这些新特性全面介绍了如何利用visual studio 2010和.net framework 4.0编写应用程序。书中沿袭深受读者欢迎的step by step风格,通过丰富的练习...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    JAVA面试宝典2010

    Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...

    C# Winform数据库应用设计(附开发案例

    c#编程集合资料,不错的应用设计,另附一些开发案例的下载地址,欢迎大家下载学习。 学习完本课程之后,我们需要达到以下目标: (1) 掌握基本的C#语法,熟练运用C#编写基本的程序逻辑。 (2) 能够创建C#控制台...

Global site tag (gtag.js) - Google Analytics