java概念(2)

java概念(2)

重载和重写

重载:同一个类中,方法名相同,参数不同

重写:父子类中,子类重新定义父类的方法

多态

​ 多态:同一种行为,不同的对象有不同的表现形式。

​ 重载 编译时根据参数决定调用的方法,即编译时的多态性。

​ 重写 运行时根据对象类型调用子类方法,即运行时的多态性。

优点:子类可以重写,提高了重用性

接口和抽象类的区别

抽象类

使用abstract修饰;

不能使用new来实例化对象;

抽象类不一定包含抽象方法,可以有具体的方法;

接口

使用interface修饰;

接口不能被实例化;

一个类只能继承一个类,但可以实现多个接口;

接口中方法均为抽象方法;

接口中不能包含实例域或静态方法。

注意:抽象类主要做父类,提供公共的属性和方法,便与重用。

	接口提供一种规范,目的是降低耦合,比抽象类 抽象程度更高。

序列化 ?

序列化: 把对象转换为字节序列 保存到流 。

实现方式:

(1) 将 被 序 列 化 的 类 实 现Serializable 接口 进行标识。

class Student implements Serializable{}

(2)使用流进行读/写

ObjectOutputStream objectStream=new ObjectOutputStream(

new FileOutputStream(new File(“d:\student.txt”));

objectStream.writeObject(objectStream);

objectStream.close();

(3) 反序列化: 将字节序列恢复为对象 。

ObjectInputStream objectStream=new ObjectInputStream(

​ new FileInputStream(new File(“d:\student.txt”)));

​ Studentstudent=(Student)objectStream.readObject();

5.Java中集合框架

图片

图片

要点:

Java集合类由两个接口派生:Collection和Map

Collection分两大部分:List和Set

List,Queue是Java提供的队列实现

Map是映射接口,每个元素都是一个key-value键值对

Set、List、Map 集合,最常用 HashSet、ArrayList、HashMap

List、Map、Set 区别

List:有序、可重复 集合,集合中每个元素都有 对应顺序索引。

​ List 默认按元素添加顺序 设置元素的索引,可以通过索引来访问指定位置元素。

​ List接口集合:ArrayList、LinkedList、Vector、Stack。

Set接口不允许重复

​ 常用实现类有HashSet、LinkedHashSet和TreeSet。

Map接口采用键值对Map<K,V>的存储方式,保存具有映射关系的数据,

​ key值不允许重复,可以为null。如果已经有重复的key,则新的value会覆盖该key原来对应的value。

​ 常用实现类有HashMap、LinkedHashMap、TreeMap等。

7. HashMap 和 HashTable 有什么区别?

要点:

HashMap与Hashtable是Map接口的两个典型实现。都是采用了hash表数据结构来实现,可以快速定位元素。存储时,根据key的哈希值决定元素存放的位置。

HashMap继承自AbstractMap类。实现了Map接口。
Hashtable继承自Dictionary类,Dictionary类是一个已经被废弃的类。父类已经不推荐使用,因此它的子类Hashtable也很少用了。

Hashtable是JDK1.0引入的,是线程安全的,适用于多线程环境

HashMap是JDK1.2引入的,非线程安全的,适用于单线程环境。不保证存取的顺序性的,也就是说遍历HashMap的时候,得到的元素的顺序与添加元素的顺序是不同的。

HashMap是允许key和value为null值的,只能有一个key为null。它用containsValue和containsKey方法判断是否包含对应键值对;

HashTable键值对都不能为空,否则包空指针异常。

8 .Java 中 ArrayList 和 LinkedList 以及Vector的区别?

要点:

ArrayList是一个动态数组Object[],是List类的典型实现。它允许任何符合规则的元素插入甚至包括null。每一个ArrayList都有一个初始容量(10),该容量代表了数组的大小。随着容器中的元素不断增加,容器的大小也会随着增加。在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。

ArrayList擅长于随机访问。同时ArrayList是非同步的。

LinkedList是List接口的另一个实现,除了可以根据索引访问集合元素外,LinkedList还实现了Deque接口,可以当作双端队列来使用,也就是说,既可以当作“栈”使用,又可以当作队列使用。

LinkedList的实现机制与ArrayList的实现机制完全不同,ArrayLiat内部以数组的形式保存集合的元素,所以随机访问集合元素有较好的性能;LinkedList内部以链表的形式保存集合中的元素,所以随机访问集合中的元素性能较差,但在插入删除元素时有较好的性能。

Vector与ArrayList相似,但是Vector是线程同步的。所以说Vector是线程安全的动态数组。它的操作与ArrayList几乎一样。

9.HashSet是如何保证数据不可重复的?

要点:

HashSet的底层其实就是HashMap,只是HashSet是实现了Set接口并且把数据作为Key值,而value值一直使用一个相同的虚值来保存.由于HashMap的Key值本身就不允许重复,并且在HashMap中如果Key/value相同时,会用新的Value覆盖掉旧的Value,然后返回旧的Value,内部执行终会返回一个false,导致插入失败,这样就保证了数据的不可重复性.

10.Collection和Collections区别

要点:

​ Collection是集合的顶层结构,提供了集合的公共操作的规范

Collections是一个静态的工具类,提供了集合常见的操作实现,比如排序,搜索,反序等,简化开发中常见的功能。

void reverse(List list)//反转

void shuffle(List list)//随机排序

void sort(List list)//按自然排序的升序排序

void sort(List list, Comparator c)//定制排序

void swap(List list, int i , int j)//交换两个索引位置的元素

void rotate(List list, int distance)//旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面

int binarySearch(List list, Object key)//对List进行二分查找
int max(Collection coll)//根据元素的自然顺序,返回最大的元素。
int max(Collection coll, Comparator c)//根据定制排序,返回最大元素,
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素。
int frequency(Collection c, Object o)//统计元素出现次数

int indexOfSubList(List list, List target)

//统计target在list中第一次出现的索引


boolean replaceAll(List list, Object oldVal, Object newVal)

元素。
int frequency(Collection c, Object o)//统计元素出现次数


int indexOfSubList(List list, List target)

//统计target在list中第一次出现的索引


boolean replaceAll(List list, Object oldVal, Object newVal)

//用新元素替换旧元素 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值