Java高级应用

Java高级应用

集合框架、泛型

什么是集合框架?

1.png

一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,ListSetQueue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayListLinkedListHashSetLinkedHashSetHashMapLinkedHashMap 等等。

什么Iterator?

答:Iterator是迭代器,他是用于访问数组的方法,可用于迭代 ArrayListHashSet 等集合。

怎么使用Iteration?
//遍历每一个元素
List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(42);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
    System.out.println(iterator.next());
}
//移除元素
List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(42);
list.add(8);
list.add(12);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
    if(iterator.next()>20) {
        iterator.remove();
    }
}
System.out.println(list);
什么是ListIterator?

答:它是Iterator的子类,也是迭代器。

怎么使用ListIterator?
List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(42);
list.add(8);
list.add(12);
ListIterator<Integer> listIterator = list.listIterator();
//添加元素
listIterator.add(56);
System.out.println(list);
//后向遍历
ListIterator<Integer> afterAdd = list.listIterator();
while(afterAdd.hasNext()) {
    System.out.println(afterAdd.next());
}
//前向遍历
while(afterAdd.hasPrevious()) {
    System.out.println(afterAdd.previous());
}
ListIterator和Iterator的区别

答:

  • iterator()方法在set和list接口中都有定义,但是ListIterator()仅存在于list接口中(或实现类中);

  • ListIterator有add()方法,可以向List中添加对象,而Iterator不能

  • ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

什么是Collection?

答:最基本的集合接口。

什么是Map?

答:Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复覆盖),但允许值重复。

怎么使用Map?
Map map1 = new HashMap();
Map map2 = new TreeMap();
Map map3 = new LinkedHashMap();
Map map4 = new Hashtable();
Map map5 = new WeakHashMap();
Map map6 = new IdentityHashMap();
  1. 什么是HashMap?

    答:基于哈希表实现的map。

  2. 什么是TreeMap?

    答:基于红黑树实想的Map。

  3. 什么LinkedHashMap?

    答:基于双向循环链表和哈希表实现的map。

  4. 什么是Hashtable?

    答:基于哈希表实现的map。

  5. 什么是WeakHashMap?

    答:基于java弱引用实现的HashMap。

  6. 什么是IdentityHashMap?

    答:基于哈希表实现的map。

  7. 有什么区别?

HashMapTreeMapLinkedHashMapHashtableWeakHashMapIdentityHashMap
是否有序
是否允许key为空值
是否线程安全
继承AbstractMap抽象类SortedMap接口HashMap类AbstractMap抽象类AbstractMap抽象类AbstractMap抽象类
特点适用于在Map中插入、删除和定位元素适用于按自然顺序或自定义顺序遍历键比 HashMap 多维护了一个双向链表、插入数据比HashMap好key没有其他引用那么此map会自动丢弃此值比较key值的时候使用==比较。
什么是List?

答:List是一个有序的集合,List允许存储项的值为空,也允许存储相等值的存储项。

怎么使用List?
List list1 = new ArrayList();
List list2 = new LinkedList();
List list3 = new Vector();
List list4 = new Stack();
  1. 什么是ArrayList?

    答:数组列表

  2. 什么是LinkedList?

    答:链表

  3. 什么是Vector?

    答:矢量

  4. 什么是Stack?

    答:堆栈

  5. 有什么区别

    ArrayListLinkedListVectorStack
    是否线程安全
    继承AbstractList抽象类AbstractSequentialList抽象类AbstractList抽象类Vector类
    特性便于数组的访问便于数组的插入和删除先进后出,后进先出
什么是Set?

答:Set和List一样,也继承于Collection,是集合的一种。和List不同的是,Set内部实现是基于Map的,所以Set取值时不保证数据和存入的时候顺序一致,并且不允许空值,不允许重复值。

怎么使用Set?
Set set1 = new HashSet();
Set set2 = new TreeSet();
Set set3 = new LinkedHashSet();
  1. 什么是HashSet?

    答:基于哈希表实现的Set。

  2. 什么是TreeSet?

    答:基于红黑树实现的Set。

  3. 什么是LinkedHashSet?

    答:基于双向链表和哈希表实现的Set

  4. 有什么区别?

    HashSetTreeSetLinkedHashSet
    是否允许key为空值
    是否有序
    继承Set接口SortSet接口HashSet类
    是否线程安全
    特性便于访问数据实现自动排序的类型,便于访问key值便于插入和删除数据
List、Set、Map的区别?

答:

  • List中的元素,有序、可重复、可为空;
  • Set中的元素,无序、不重复、只有一个空元素;
  • Map中的元素,无序、键不重,值可重、可一个空键、多可空值;
数组和集合的区别?

答:

  • 数组的存放的类型(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。
  • 数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小。

什么是泛型?

答:泛指的类型,当数据类型不确定,可以使用泛型方法的方式,达到简化代码、提高代码重用性的目的。

怎么使用泛型?

//泛型类
public class Gen<T>{

}
//泛型接口
public interface List<T> extends Collection<T>{
    
}
//泛型方法
public<T> void f(T x){

}

异常处理与XML解析

什么是异常?

答:异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

怎么对异常进行处理?

  1. 积极的处理

    答:通过try{}catch{}处理。

    try{
       // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }catch(异常类型3 异常的变量名3){
      // 程序代码
    }
    
  2. 消极的处理

    答:通过throw/throws关键字处理。

    public void test() throws Exception{
        throw new Exception();
    }
    
finally关键字

答:无论是否发生异常,finally 代码块中的代码总会被执行。

try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}finally{
  // 程序代码
}

DOM4J解析XML

什么是xml?

答:可扩展的标记语言。用于存储数据和描述数据,不同的平台可以同过xml文件建立起联系

怎么使DOM4J解析xml?
 <dependency>
     <groupId>dom4j</groupId>
     <artifactId>dom4j</artifactId>
     <version>1.6.1</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<animals>
	<animal name="dog">
		<name>柯基</name>
		<color>棕色</color>
	</animal>
	<animal name="cat">
		<name>波斯猫</name>
		<color>白色</color>
	</animal>
</animals>
//1.创建Reader对象
SAXReader reader = new SAXReader();
//2.加载xml
Document document = reader.read(new File("src/com/linx/Animal.xml"));
//3.获取根节点
Element rootElement = document.getRootElement();
Iterator iterator = rootElement.elementIterator();
while (iterator.hasNext()){
    Element element = (Element) iterator.next();
    List<Attribute> attributes = element.attributes();
    System.out.println("======获取属性值======");
    for (Attribute attribute : attributes) {
        System.out.println(attribute.getValue());    
    }
    System.out.println("======遍历子节点======");
    Iterator iterator1 = element.elementIterator();
    while (iterator1.hasNext()){
        Element elementChild = (Element) iterator1.next();
        System.out.println("节点名:"+elementChild.getName()+"---节点值:"+elementChild.getStringValue());
    }
}                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值