泛型 队列 栈

泛型在集合中的应用
泛型是在javaSe5.0后引入的特性,泛型的本质是参数化类型,在类,接口和方法的定义中,所操作的
数据类型被传入的参数指定

Java泛型机制广泛的应用在集合框架中,所有的集合类型都带有泛型参数,这样在创建集合时可以指定
放入集合中元素的类型,Java编译器可以根据此进行类型检查,这样可以减少代码在运行时出现错误
的可能性

ArrayList类的定义中,<E>中的E为泛型参数,在创建对象时可以将类型作为参数传递,此时类定义所有
的E将被替代成传入的参数

List<String> list = new ArrayList<String>();
list.add<"one">;
list.add<100>;java编译器类型检查错误,此时add方法应该传入的参数为String

集合操作--线性表
List接口是Collection的子接口,用于定义线性表数据结构,可以将List理解为存放对象的数组,
只不过其元素个数可以动态的增加或减少

- List接口的两个常见实现类:ArrayList和LinkedList,分别用动态数组和链表的形式实现了List接口

- get和set
List除了继承Collection定义的方法外,还根据其线性表的数据结构定义了一系列的方法,其中最常
用的就是基于下标的get和set方法

- E get(int index)
获取集合中指定下标对应的元素,下标从0开始

- E set(int index,E element)
将给定的元素存入给定位置,并将原位置的元素返回

插入和删除
- List根据下标的操作还支持插入和删除操作
- void add(int index,E element)
将给定的元素插入到指定位置,原位置及后续元素都顺序向后移动

- E remove(int index)
- 删除给定位置的元素,并将被删除的元素返回

- subString()
- List和数组之间的相互转换
- 数组的排序
- comparable接口以及comparator接口

队列和栈
.队列(Queue)是常用的数据结构,可以将队列看特殊的线性表,队列限制了对线性表的访问方式:
只能从线性表的一段添加(offer)元素,从另一端取出(poll)元素
队列所遵循的原则:先进先出(FTFO First input First Output)

JDK提供了Queue的接口,同时使得LinkedList实现了该接口(选择LinkedList的原因在于Queue经常
需要进行添加和删除操作,而LinkedList在这方面效率较高)

--Queue接口中的主要方法如下:
Boolean offer(E e):将一个对象添加至队尾,如果添加成功则返回true,否则false.

E poll();从队首删除并返回一个元素

E peek();返回队首元素(但并不删除)

栈:先进后出

Deque 先进后出
.Deque是Queue的子接口,定义了所谓"双端队列"即从队列的两端分别可以入队和出队,LinkedList也
实现了这个接口

如果将Deque限制为只能从一段入队和出队,则可实现"栈"stack的数据结构,对于栈而言,
入栈称之为push,出栈称之为pop

栈遵循先进后出的原则

查询表
Map()接口
.Map接口定义的集合(查询包),用于存储所谓的"key-value"映射对,key可以看成是value的索引,
作为key的对象在集合中不可以重复

.根据内部数据结构的不同,Map接口的实现类很多,其中常用的有内部为hash表实现的HashMap和内部
为排序二叉树实现的TreeMap

put()方法:
.Map接口定义了向Map中存放元素的put方法:
-V put(K key,V value);
.将Key-Value对存入Map,如果在集合中已经包含该Key则操作将替换掉Key所对应的value值,返回该
key原来所对应的值Value.(如果没有则返回null)

get()方法:
.Map接口中定义了从Map中获取元素的get方法
-V get(Object key)
.返回参数Key所对应的Value对象,如果不存在则返回null(这里指的是key不存在则返回null)

containKey()方法
.Map接口中定义了判断某个Key是否在Map中存放.
--boolean containsKey(Object key)
若Map中包含给定的key则返回true,否则返回false.
如何创建:
Map<String,Integer> map = new HashMap<String,Integer>();

有序Map
LinkedHashMap实现有序的map
.使用Map接口的哈希表和链表实现,具有可预知的迭代顺序,此实现与HashMap的不同之处在于
-LinkedHashMap维护者一个双向循环链表,此链表定义了迭代顺序
该迭代顺序通常就是存放元素的顺序

遍历map
使用KeySet()方法
.Map提供了三种遍历方式
-遍历所有的Key
-遍历所有的key-value对
-遍历所有的value(不常用)

.遍历所有key的方法
-Set<K> KeySet();
-该方法会将当前Map中所有的key存入到Set集合中返回

.使用entryset()方法:
Set<Entry<K,V>> entrySet();
-该方法会将当前Map中每一组key-value对封装为一个Entry对象并存入Set集合后返回

文件操作:
File对象
1.java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的
目录和文件
2.File类只能用于表示文件(目录)的信息(名称,大小等),不能对文件的内容进行访问
3.构造方法
-File(String path/name)
-通过将给定路径名字字符字符串转换成抽象路径名来创建一个系的File实例
-抽象路径名应尽量使用相对路径,并且目录的层级分离符不要直接写"/"或"\"
应该使用File.separator这个常量表示,以避免不同系统带来的差异

File(File parent,String child)
.File还提供了另一个构造方法
-根据parent抽象路径名和child路径名字字符串创建一个新File实例

ifFile()方法
.File的isFile()方法用于判断当前File对象所表示的是否为一个文件
-boolean isFile()
-返回值:当前File对象所表示是一个文件时返回true

length()方法
File的length方法用于返回此抽象路径名表示的文件的长度(占用字节量)
-long length();
-返回值:当前File对象所表示的文件所占用的字节量

exist()方法
File的exist()方法用于测试此抽象路径名表示的文件或目录是否存在
-boolean exist();
-返回值:若该File表示的文件或目录存在则返回true,否则返回false

createNewFile()方法
File的createNewFile方法用于当且仅当不存在具有此抽象路径名指定的名称的文件时,
原子地创建由此抽象路径名指定的一个新的空文件
-boolean createNewFile
-返回值:如果指定的文件不存在并成功的创建,则返回true;如果指定的文件已经存在,则返回false

猜你喜欢

转载自blog.csdn.net/CXY_ZPH/article/details/84994040