java day8

第8章 数据结构

  • 8.1 超越数组
  • 8.2 java数据结构
    • 8.2.1 Iterator
    • 8.2.2 位组
    • 8.2.3 链表
    • 8.2.4 遍历数据结构
    • 8.2.5 堆栈
    • 8.2.6 Map
    • 8.2.7 散列映射
  • 8.3 泛型

8.1 超越数组

java类库的java.util包中有一组数据结构,它们让您能够更灵活地组织和操纵数据。

8.2 java数据结构

8.2.1 Iterator

接口Iterator提供了一种以定义好的顺序遍历一系列元素的标准方式。
来看看Iterator定义的三个方法:

  • public boolean hasNext()
  • public object next()
  • public void remove()

方法hasNext()定义了结构是否还有包含其他元素。可调用该方法来查看是否可以继续遍历结构。
方法next()获得结构中的下一个元素。如果没有更多的元素,next()将引发NoSuchElementException异常。为避免这种异常,应结合使用hasNext()和next()来确保还有元素可检索。

8.2.2 位组

使用BitSet类,可以用位来存储布尔值,而无须通过按位运算来提取位值。您只需要使用索引来引用每一位。BitSet的另一个优点是,它可以自动增大,以表示程序所需的位数。

BitSet connex = new BitSet();

BitSet connex = new BitSet(4);
// 不管使用哪个构造函数,新位组中的所有位都将被初始化为false

class ConnectionAttributes {
	public static final int FLEXIBLE = 3;
}

connex.set(ConnectionAttributes.FLEXIBLE);
// 设置属性

connex.clear(ConnectionAttributes.FLEXIBLE);
// 清除属性

boolean isWriteable = connex.get(ConnectionAttributes.FLEXIBLE);
// 使用get方法来获得位组中的各个位

int numBits = connex.size();
// 使用size方法可以确定位组表示了多少位

8.2.3 链表

类ArrayList是最流行的java数据结构之一,它实现了可缩放的对象数组,比数组更灵活、更有用。由于类ArrayList负责根据需要改变长度,所有它必须根据元素的增加和删除决定缩放多少。

ArrayList golfer = new ArrayList();

ArrayList golfer = new ArrayList(30);
// 该构造函数创建了一个不含任何元素的默认链表

golfer.add("Ko");
golfer.add(1,"kim");
// add(object)方法将元素加入到链表中

String s1 = (String) golfer.get(0);
// 由于链表的索引值是从0开始的,所以第一个get()调用返回的是字符串Ko

golfer.remove(3);
golfer.remove("ko");
// 删除指定位置的元素或指定的元素


golfer.set(1,"Pressel");
// 上述将字符串kim替换为字符串Pressel

golfer.clear();
// 可以使用clear()来删除所有的元素

boolean isThere = golfer.contains("kerr");
// 检验链表是否包含指定元素

int i = golfer.indexOf("ko");
// 如果链表包含指定的元素,indexOf方法将返回该元素的索引,否则返回-1.

int size = golfer.size();
// 将方法size判断链表包含多少个元素

golfer.trimToSize();
// 使用该方法让容量与长度相等

8.2.4 遍历数据结构

如果要依次处理链表的所有元素,可以使用方法iterator(),它返回一个Iterator,其中包含可供您遍历的元素列表

Iterator it = golfer.iterator();
// 下面的for循环使用迭代器及其方法来遍历整个链表
for (Iterator i = golfer.iterator(); i.hasNext(); ) {
	String name = (String) i.next();
	System.out.println(name);
}

8.2.5 堆栈

Stack s = new Stack();

s.push("one");
// 可以使用方法push()将新元素加入堆栈,将元素压入到栈顶

String s1 = (String) s.pop();
// 将最后两个字符串从堆栈中弹出,只留下前4个字符串

String s3 = (String) s.peek();
// 获得栈顶元素,但并不将其从堆栈弹出

int i = s.search("Two");
// 如果找到,方法search将返回该元素到栈顶的距离,否则返回-1

boolean isEmpty = s.empty();
// 判断堆栈是否为空

8.2.6 Map

接口Map为实现键映射数据结构定义了一个框架,这种结构可用于存储通过键值引用的对象。

Rectangle r1 = new Rectangle(0,0,5,5);
look.put("small",r1);
// 将对象加入字典

Rectangle r = (Rectangle) look.get("small");
// 获取字典中的对象

look.remove("large");
// 使用remove()来删除指定键值对应的元素

int size = look.size();
// 使用size()来获悉结构包含多少个元素

boolean isEmpty = look.isEmpty();
// 使用方法isEmpty()来检查结构是否为空

8.2.7 散列映射

类HashMap实现了接口Map,并提供了键映射数据结构的完整实现。散列映射让您能够基于某种类型的键值来存储数据,并具有由负载系数定义的效率。

HashMap hash = new HashMap();
HashMap hash = new HashMap(20);
HashMap hash = new HashMap(20,0.5F);
// 构造函数

hash.clear();
// 删除散列映射中的所有键值和元素

Rectangle box = new Rectangle(0,0,5,5);
boolean isThere = hash.containsValue(box);
// 检查散列映射是否包含指定的对象

boolean isThere = hash.containsKey("Small");
// 在散列映射中查找指定的键值

8.3 泛型

可使用java语言支持的泛型来指定数据结构期望的类。

ArrayList<Integer> zipCodes = new ArrayList<>();

HashMap<String,Float> quality = new HashMap<String,Float>();

见到菱形运算符后,编译器通过推断来确实正确的类,以确保语句是有意义的

你可能感兴趣的:(java学习,java)