一.set,list 区别List和Set都是接口。
他们各自有自己的实现类,有无顺序的实现类,也有有顺序的实现类。
最大的不同就是List是可以重复的。
而Set是不能重复的。
List适合经常追加数据,插入,删除数据。
但随即取数效率比较低。
Set适合经常地随即储存,插入,删除。
但是在遍历时效率比较低。
二.ArrayList与LinkedList区别。
List: 有顺序的,元素可以重复遍历:for 迭代排序:Comparable Comparator Collections.sort()ArrayList:底层用数组实现的List特点:查询效率高,增删效率低轻量级线程不安全遍历:ArrayList<String> al=new ArrayList();al.add("winsun"); al.add("weixin"); al.add("mybole");for(int i=0;i<al.size();i++){System.out.println(al.get(i));}//for遍历Iterator it=al.iterator();while(it.hasNext()){System.out.println(it.next());}//迭代器遍历LinkedList:底层用双向循环链表实现的List特点:查询效率低,增删效率高Vector: 底层用数组实现List接口的另一个类特点:重量级,占据更多的系统开销线程安全1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。
对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。
2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
3.LinkedList不支持高效的随机元素访问。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
三.HashMap与Hashtable区别。
1、继承和实现区别Hashtable是基于陈旧的Dictionary类,完成了Map接口;HashMap是Java 1.2引进的Map 接口的一个实现(HashMap继承于AbstractMap,AbstractMap完成了Map接口)。
2、线程安全不同HashTable的方法是同步的,HashMap是未同步,所以在多线程场合要手动同步HashMap。
3、对null的处理不同HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
即HashTable不允许null值其实在编译期不会有任何的不一样,会照样执行,只是在运行期的时候Hashtable中设置的话回出现空指针异常。
HashMap允许null值是指可以有一个或多个键所对应的值为null。
当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。
因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
4、方法不同HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
5、HashTable使用Enumeration,HashMap使用Iterator。
6、HashTable中hash数组默认大小是11,增加的方式是old*2+1。
HashMap中hash数组的默认大小是16,而且一定是2的指数。
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。
即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。
但HashMap的同步问题可通过Collections的一个静态方法得到解决:Map Collections.synchronizedMap(Map m)这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
当get()方法返回null值时,即可以表示HashMap 中没有该键,也可以表示该键所对应的值为null。
因此,在HashMap中不能由get()方法来判断HashMap 中是否存在某个键,而应该用containsKey()方法来判断。
四.常用集合类有那些。
(1)集Set集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。
对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。
我们知道数学上的集合也是Set这个,集合里面一定是没有重复的元素的。
(2)列表List列表(List)的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的Set是不同的。
它是链表嘛,一条链肯定有顺序这个顺序就不一定了。
(3)映射Map 映射(Map),这个在java里不是地图的意思,其实地图也是映射哈。
它里面的东西是键-值对(key-value)出现的,键值对是什么呢?举个例子,比如我们查字典,用部首查字法。
目录那个字就是键,这个字的解释就是值。
键和值成对出现。
这样说可以理解吧。
这也是很常用的数据结构哦。
(4)队列Queue在jdk5.0以前,通常的实现方式是使用java.util.List集合来模仿Queue.Queue的概念通过把对象添加(称为enqueuing的操作)到List的尾部(即Queue的后部)并通过从List的头部(即Queue的前部)提取对象而从List 中移除(称为dequeuing的操作)来模拟。
你需要执行先进先出的动作时可以直接使用Queue接口就可以了五.讲下封装,继承,多态的概念。
1.封装性是指的把代码封装到大括号中,只能访问自己内部的数据,外边的东西访问不了. 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
2.继承性就是一个类声明继承另一个类,那么另一个类就是它的父类,父类里边的变量跟方法子类可以直接拿来用,除非父类的访问权限不允许.封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
3.多态分为方法的重载和重写,重载是指方法的名和返回类型相同,但是参数不同.重写是指子类继承父类的方法,但是在子类自己类体里边又写了一个方法, 跟父类中的方法名,返回类型,参数列表都完全一样,但是方法体不同,也就是说它有自己的实现方式.这就是重写.多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
六.重载与覆盖你是怎么理解的。
方法重载的三大原则是?1.重载就是具有相同函数名,返回类型可以不同,参数个数、顺序、类型不同的函数。
我的理解是重载是发生在两个或者是更多的函数具有相同的名字的情况下。
重写就是覆盖父类的方法,和父类有相同返回类型,参数,甚至是抛出的异常,重写方法不能为private,运用中最典型的就是对接口方法的覆盖。
Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
2.①.基本类型下重载方法的调用:在方法调用时,如果实参的类型与方法中形参的类型不相同,那么系统会调用形参类型可以兼容的实参类型,并且形参与实参类型最“亲密”的那个方法,也就是雨实参类型最接近的方法,所以方法调用中实参类型为char,而候选的方法中不存在形参类型为char,而分别为byte,short,int,long,float,double类型时,byte与shaort 不能兼容char类型,不与考虑,剩下的4个类型类型中,int与char最为接近,此时会调用形参为int的方法。
②.引用类型下重载方法的调用:与基本数据类型的调用相似,形参与实参的参数列表不相同,而对应的形参类型可以兼容实参类型时,那么选择形参类型与实参类型兼容,并且与实参类型最接近的方法。
比如爷爷,父亲,孙子的继承关系下,仅有父亲与爷爷为参数的方法,那么孙子对象就会调用父亲为形参的方法。
③.重载无法实现多态:.对于引用类型参数的方法选择,是根据引用类型来决定调用哪个方法,与对象的类型没有关系,因为重载方法是在编译时确定的,也可以说“前期绑定”或“静态绑定。
引用所指的对象类型在运行时才确定的,所以使用重载无法实现多态。
”七.线程如何实现。
你对同步的理解.线程如何启动。
1.①实现Runnable接口②.继承Thread类③覆盖里面的run方法2.基本概念:每个Object都会有1个锁.同步就是串行使用一些资源.①. 多线程中对共享、可变的数据进行同步.对于函数中的局部变量没必要进行同步.对于不可变数据,也没必要进行同步. 多线程中访问共享可变数据才有必要.②单个线程中可以使用synchronized,而且可以嵌套,但无意义.③对象实例的锁. ④class的锁⑤. static method⑥对线程的run()进行同步没有意义,如public synchronized void run()3.①扩展ng.Thread类;②实现ng.Runnable接口八.jdbc如何获得连接。