【面试问题一】:IBM面试
List的排序问题:
给定你一个list,里面放的都是string类型对象,按照string的第二字母来进行排序。
所涉及到的类主要有:
Collections:sort(List, Comparator);
【解释】:Collections跟Arrays类是类似的,只不过一个操作集合,另外一个操作数组。
这个类是单独实现,继承自Object。
可以实现,求最大,最小值,二分查找,生成“线程安全”的集合类。
都是静态的方法。
【collections】:这个单词的意思是:收集,集中在一起的人或物。
【array】:数组,阵列,大堆,大群;有特指“数组”的意思。
Comparator:compare(Object, Object);
【解释】comparable:可比较的,比得上的;
【comparator】:比较器;在java中是一个接口;
可以使用匿名类的方法来进行实现,注意最后要加逗号。
compare函数有两个Object参数从来比较。
【comparable】:这是另外一个实现比较的接口,但是一般的要比较的
对象来实现。
【comparable跟comparator的本质区别】:
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);
【面试问题二】:支付宝面试
【list和set的区别】:
最本质的区别总结为三点(1)list的元素是有顺序的,set没有顺序;(2)list可以包含重复的元素,set内不可能包含重复的元素;(3)两者都可以包含null,list甚至可以包含多个null,set只能有一个null。
Null我们理解为这个内存地址为00000000,意思是说没有内存地址;
【ArrayList跟Vector的本质区别】:
【vector】:名词:矢量,向量的意思。
最本质区别:ArrayList不是线程安全的;Vector是线程安全的;
所以ArrayList的实现效率是更高的;
【集合中的各种类,以及他们之间的关系】:
【ArrayList】
包:java.util包;
父类:java.util.List;实际上,这是一个接口;
这个接口的主要实现类是【ArrayList,Vector,LinkedList】;
暂时,我们认为就是这三个类,以后再慢慢添加,别人都还没做过的东西,自己绝对不要去接触,太耽误时间。
【LinkedList】:
这个类是包是:java.util父类也是List;
Linked这个单词的意思是:链表,链接是意思;
List这个英文单词的意思是:目录,清单,一览表的意思;要从根本上去理解这个单词;深刻地去体会。
在本质上,这是一个链表,LinkedList.add(index, element),前面这个函数是linkedlist最大的优势。
在本质上,Vector和ArrayList都是数组实现的,索引快。
链表在指定位置插入、删除更快。
实际的用法可以一点一点添加。
【HashMap和Hashtable的本质区别】
注意:HashTable的写法不对,t不应该大些;
HashMap是Hashtable的轻量级实现,非线程安全的实现,主要区别在于HashMap允许null的键或值,由于非线程安全,效率上可能高于Hashtable。HashMap把Hashtable的contains方法去掉了,改成了containsvalue和containsKey。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很多的差异。
HashMap => 不同步、空键值、效率高;
Hashtable => 同步、非空键值、效率略低
【如何将一个数组转换成list】:
Arrays:
<!--[if !supportLists]-->1. <!--[endif]-->// 将array0中的第2个到第3个元素的值赋为8
<!--[if !supportLists]-->2. <!--[endif]--> Arrays.fill(array0, 2, 4, 8);
<!--[if !supportLists]-->1. <!--[endif]--> // 对数组排序
<!--[if !supportLists]-->2. <!--[endif]--> int[] array1 = new int[] { 7, 8, 3, 12, 6, 3, 5, 4 };
<!--[if !supportLists]-->3. <!--[endif]--> // 对数组的第2个到第6个元素进行排序
<!--[if !supportLists]-->4. <!--[endif]--> Arrays.sort(array1, 2, 7);
【解释】:
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 keys和values。
【迭代器】:
Java中的迭代器功能比较简单,并且只能单行移动;
(1)使用iterator()要求容器返回一个Iterator。第一次调用Iterator的next方法时,它返回序列的第一个元素;
(2)使用next()获得序列中的下一个元素;
(3)使用hasNext()检查序列中是否还有元素;使用remove将迭代器新返回的元素删除。
(4)list中有专门的ListIterator,可以从两个方向遍历List,也可以从List中插入和删除元素。
【Set的功能方法】:
Set是一个interface:存入set的每个元素次序是唯一的,因为set不保存重复的元素。加入Set的Object必须定义equals()方法以确保对象的唯一。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet:为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()?????
TreeSet:保持次序的Set,底层为树结构。使用它可以从Set中提取有序序列。
LinkedHashSet:具有HashSet的查询速度,且内部使用链表来维护元素的顺序,插入的次序。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注重的是:生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并且定义compareTo()方法。
分享到:
相关推荐
搜索“[Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(2/2)”可以下载另外一半 或者直接打开链接“http://download.csdn.net/detail/sfstream6/8240837” 目 录 第1 章 初识Visual Basic 2010...
6. **数组变量名赋值与数组克隆的区别**:对这一概念进行了详细解释,帮助读者理解两种操作之间的不同之处。 7. **扩展了双端队列接口Deque和链表类LinkedList的讨论**:详细介绍了这两个数据结构的特性和用法。 8. ...
全国2010年1月自学考试的Java语言程序设计试题涉及了Java编程语言的核心概念,包括基础语法、数据类型、面向对象编程、Swing图形用户界面、事件处理、文件操作以及多线程编程等多个方面。下面,我将基于提供的部分...
文档标题和描述中提到的是“2010年9月计算机等级考试二级Java笔试真题”,这表明我们讨论的主题是关于计算机编程语言Java的基础知识,特别是针对国家计算机等级考试二级的笔试部分。这类考试通常会涵盖Java语言的...
Java私塾基础入门电子书是针对初学者设计的教程,旨在帮助他们系统地学习和理解Java编程语言。这本书可能包含了以下重要知识点: 1. **Java简介**:介绍Java的历史、特性,以及它在软件开发中的广泛应用,强调其跨...
12. **Java的网络编程**:涵盖Socket编程,服务器端和客户端的实现,以及套接字通信的基础知识。 13. **Java的数据库连接**:讲解如何使用JDBC(Java Database Connectivity)与各种数据库进行交互,包括连接、查询...
visual c# 2010新增了大量可圈可点的丰富特性,本书围绕着基础知识和这些新特性全面介绍了如何利用visual studio 2010和.net framework 4.0编写应用程序。书中沿袭深受读者欢迎的step by step风格,通过丰富的练习...
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 ...
12. **Java Applet和Swing**:基础的GUI编程,包括如何创建窗口应用程序和简单组件的使用。 此外,《2010新版Java教程》还可能涵盖了Java标准库中的其他重要类库,如日期时间API、正则表达式、反射、枚举等,这些都...
Java程序设计是编程领域中的重要课程,特别是在2010年这个时间点,Java已经成为了广泛应用的编程语言。本课件旨在为初学者提供全面的Java基础知识,帮助他们快速掌握编程核心概念。以下是对该课件中可能涵盖的重要...
2010年版的Java教程,尽管年代稍显久远,但其基础概念和核心知识仍然适用于现代Java开发,尤其是对于初学者而言,这些基础知识是不可或缺的。Java教程通常会涵盖以下关键知识点: 1. **Java概述**:包括Java的历史...
3. **数组与集合框架**:介绍数组的基本操作,以及Java集合框架中的ArrayList、LinkedList、HashSet、HashMap等数据结构的使用方法和它们之间的区别。 4. **字符串处理**:探讨String类的不可变性,StringBuilder与...
1. **Java基础**:Java的基础部分包括语法、变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)、方法和数组。这些是所有编程语言的核心元素,Java也不例外。 2. **面向对象编程(OOP)**:Java是...
1. **Java编程基础**: 学习文档可能涵盖Java的基本语法,如变量、数据类型、控制结构(条件语句、循环)、函数、数组等。 2. **面向对象编程**: 作为面向对象的语言,Java的类、对象、继承、封装和多态等概念可能是...
2. **基础语法**:学习Java首先要掌握基础语法,包括变量、数据类型(如整型、浮点型、字符型、布尔型以及引用类型)、运算符、流程控制(如if语句、switch语句、for循环、while循环和do-while循环)、数组等。...
Java是世界上最流行的编程语言之一,尤其在企业级应用和服务器端开发中占据着主导地位。在《程序设计导论》这门课程中,学生通常会接触到基础的编程概念,包括变量、控制结构、数据类型、类与对象等,并通过学习Java...
13. **算法和数据结构**:虽然Java面试不一定深入到算法,但基础的排序算法(冒泡、选择、插入、快速、归并)、查找算法(二分查找)和常见数据结构(数组、链表、栈、队列、树、图)的了解是必要的。 14. **Java新...
19. 包与类的关系:`java.util`包中包含集合框架,不包含`JOptionPane`,`java.lang`是基础包,`java.applet`与Applet相关。JOptionPane属于Swing组件,故在`javax.swing`包中。正确答案是A)。 20. Java字符串连接...