多态
多态语法格式
父类类名 引用名称 =new 子类类名();
Vehicle c=new car();
注意:当时多态是,该引用类型只能访问父类中的属性和方法,但是优先访问子类重写以后的方法
多态:将多个对象调用同一个方法,得到不同的结构
满足条件:
• 子类必须继承父类
• 子类重写父类方法
• 父类类名 引用名称 =new 子类类名();
多态的好处:
减少代码的冗余性
多态中的两种类型转换
向上转型:自动类型转换,构成多态
• 父类类型 引用名称=New 子类类名();
• 当时多态时,该用用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法
向下转型,也叫强制类型转换:
•当是多态时,并且访问子类独有的属性和方法,则必须进行向下转型
• 当进行向下转型时,建议先进行判断,当合法则在转为对应的类型,则使用instanceof关键词
Collection
- 集合是java中提供的一种容器,可以用来存储多个数据
- 数组的长度是固定的。集合的长度是可变的。
- 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
collection常用方法(list set通用):
* public boolean add(E e): 把给定的对象添加到当前集合中 。
* public void clear() :清空集合中所有的元素。
* public boolean remove(E e): 把给定的对象在当前集合中删除。
* public boolean contains(E e): 判断当前集合中是否包含给定的对象。
* public boolean isEmpty(): 判断当前集合是否为空。
* public int size(): 返回集合中元素的个数。
* public Object[] toArray(): 把集合中的元素,存储到数组中。
迭代器(Iterator)
Collection集合包含vector,ArrayList,LinkedList等,取出元素的方式都不一样这时候就需要迭代器取出
Iterator概念:在取出元素之前要判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,还有继续取,直到全部取出,这种取出方式称为迭代
常用两个方法:
boolean hasNext() E next()
//遍历
Iterator<String> it = collection.iterator();//获取迭代器的实现类对象(多态)
while(it.hasNext()) {
System.out.println(it.next());
}
List接口
- 有序的集合,存储元素和取出顺序一致
- 有索引,包含了一些带索引的方法
- 允许存储重复元素
List接口中带所有的方法(特有)
public void add(int index,E element);//将指定的元素添加到改集合中的指定位置
public E get(int index);//返回集合中钉钉位置的元素
public E remove(int index);//移除列表中指定位置的元素,返回被移除的元素
public E set(int index,E element);//指定元素替换集合中指定位置的元素返回值的更新前的元素
Set接口
- 不允许存储重复元素
- 没有索引,没有带索引的方法,不能使用普通for循环遍历
常用方法:
TreeSet中常用的方法:
boolean add(E e):添加一个元素,如果set中不存在该元素
boolean addAll(Collection<? extends E> c):向set添加集合
E ceiling(E e):返回大于等于给定元素的最小元素,没有返回null
void clear():移除所有元素
Object clone():浅拷贝集合
boolean contains(Object o):判断set是否包含某元素
E first():返回set的第一个元素
E last():返回set的最后一个元素
E floor(E e):返回给定元素的上一元素
E higher(E e):返回比给定元素大的最小元素
E lower(E e):返回比给定元素小的最大元素
SortedSet<E> headSet(E toElement):返回不包含给定元素前面的所有元素
SortedSet<E> tailSet(E fromElement):返回大于等于给定元素后面的所有元素
SortedSet<E> subSet(E fromElement, E toElement):返回开始/结束元素之间的所有元素集合,[from, to)
NavigableSet<E> headSet(E toElement, boolean inclusive):返回比给定元素小的元素集合,true表示小于等于
NavigableSet<E> tailSet(E fromElement, boolean inclusive):返回比给定元素大的元素集合,true表示大于等于
boolean isEmpty():判断set是否为空
Iterator<E> iterator():返回一个升序的set迭代器
E pollFirst():移除第一个元素,返回null如果set为空
E pollLast():移除最后一个元素,返回null如果set为空
boolean remove(Object o):移除指定元素
int size():返回集合元素数目
常用实现类
HashSet
- 有set接口的两个特点
- 是一个无序集合 底层是哈希表结构
LinkedHashSet
- 底层是哈希表(数组+链表+红黑色)+链表,多了一个链表(记录元素的存储顺序),保证元素有序
- 有序,不允许重复
TreeSet
Map集合
Collection和Map的区别:
- 单列和双列
- map包含两个值(key,value)
- key和value的数据类型可以相同也可以不同,key不允许重复,value可以
map集合的两个子集,HashMap,LinkedHahMap
常用方法
public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
public Set keySet() : 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
map循环取值的两种方法:
Map.enrtySet:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("赵丽颖", 18);
map.put("李易峰", 20);
map.put("迪丽沙巴", 15);
//增强for循环循环方法
for (Map.Entry<String, Integer> Entry : map.entrySet()) {
String Key=Entry.getKey();
Integer Value=Entry.getValue();
System.out.println(Key+Value);
}
//迭代器循环方法
// Set<Map.Entry<String, Integer>> set = map.entrySet();
// Iterator<Map.Entry<String, Integer>> it = set.iterator();
// while (it.hasNext()) {
// Map.Entry<String, Integer> entry = it.next();
// String key = entry.getKey();
// Integer value = entry.getValue();
// System.out.println(key + value);
// }
map.Keyset:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("赵丽颖", 18);
map.put("李易峰", 20);
map.put("迪丽沙巴", 15);
//迭代器循环
Set<String>set=map.keySet();
Iterator<String>it=set.iterator();
while (it.hasNext()){
String key=it.next();
Integer Value=map.get(key);
System.out.println(key+Value);
}
//增强for
for (String key : map.keySet()) {
Integer value = map.get(key);
System.out.println(key + value);
}