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的存储方式,保存具有映射关系的数据,
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)
//用新元素替换旧元素
标签:java,HashMap,List,ArrayList,元素,list,接口,概念
来源: https://blog.csdn.net/weixin_48407105/article/details/113801842