Java 常用语法和数据结构

简介:

Collection

首先Java中的collection都是支持泛型和类型安全 
由于Java单根继承, 所以不指定, 可以在collection里面放任何对象, collection会都当作object对象, 当然这样处理, 在对象取出时, 需要自己向下转型

ArrayList apples = new ArrayList(); //默认为object
apples.add(new Apple());
Apple a = (Apple)apples.get(0); //手动转型

当然也可以指定类型, 类似c++模板语法, 编译器会默认知道存放的是Apple

ArrayList<Apple> apples = new ArrayList<Apple>();

image

Collection接口提供的函数,

boolean add(Object obj)  //添加一个Object元素
boolean addAll(Collection c)
boolean contains(Object obj) //判断obj是否是调用collection的一个元素(属于)
boolean containsAll(Collection c) //判断c是否是调用collection的子集(包含)
boolean equals(Collection c) //判断c是否与调用collection相等
int hashCode() //返回collection的hash code
boolean removeAll(Collection c) //从调用collection中去掉所有c中包含的元素(差集)
boolean retainAll(Collection c) //交集
Object[] toArray() //返回collection的元素组成的数组 void clear() boolean isEmpty() int size()

完整的类图,

image

 

迭代器(Iterator)

提供对collection统一的访问方式,

Iterator iterator = collection.iterator();//得到一个迭代器
while (iterator.hasNext()) {//遍历
    Object element = iterator.next();
    System.out.println("iterator = " + element);
}

上面已经显示iterator(), hasNext(), next()的使用方式 
还有remove(), 删除由next方法返回的最后一个元素, 即先调用next, 再调用remove删除刚返回的element

Foreach

对iterator的封装, 底层仍然是调用iterator, 所以任意实现了Iterable接口的class对象, 都可以使用Foreach

Collection<String> cs = new LinkedList<String>(); 
for(String s : cs) 
    System.out.print("" + s + "");  

ListIterator

专门用于处理list的iterator, 支持双向遍历和element更新

public interface ListIterator<E> extends Iterator<E> { 
    boolean hasNext();
    E next();    
    boolean hasPrevious(); //支持向前遍历
    E previous();
    int nextIndex(); //对位置index的支持
    int previousIndex();
    void remove();
    void set(E e); //更新最后遍历到的元素
    void add(E e); //在最后遍历到的元素后add element
}

 

List

可见对于List, 有比较老的版本, Vector和Stack, 是线程安全的, 但相应的效率较低 
对于新版本, ArrayList, 基于数组实现; LinkedList, 基于链表实现, 非线程安全, 相应的效率较高, 这样当你需要考虑线程安全的时候自己加上, 更为合理.

和collection的基类相比, 增加对于位置序号的操作

void add(int index, Object element) //添加对象element到位置index上
boolean addAll(int index, Collection collection) //在index位置后添加容器collection中所有的元素
Object get(int index) //取出下标为index的位置的元素
int indexOf(Object element) //查找对象element在List中第一次出现的位置
int lastIndexOf(Object element) //查找对象element在List中最后出现的位置
Object remove(int index) //删除index位置上的元素
Object set(int index, Object element) //将index位置上的对象替换为element 并返回老的元素
List subList (int start, int end) //取出子list

LinkedList

除了支持标准的List接口, 还可以用于实现队列和栈

stack

public class Stack<T> { 
    private LinkedList<T> storage = new LinkedList<T>(); 
    public void push(T v) { storage.addFirst(v); } 
    public T peek() { return storage.getFirst(); } 
    public T pop() { return storage.removeFirst(); } 
    public boolean empty() { return storage.isEmpty(); } 
    public String toString() { return storage.toString(); } 
} 

queue

Queue<Integer> queue = new LinkedList<Integer>(); //LinkedList是Queue的子类,已经包含queue的接口
offer() //插入element到队尾
peek(), element() //不移除,返回队头,区别是为空时, peek返回null, 而element会抛异常
poll(), remove() //移除并返回队头,同样为空时, poll返回null, 而remove会抛异常

PriorityQueue, 接口相同, 只不过基于最小堆实现

deque, 双向队列

public class Deque<T> { 
    private LinkedList<T> deque = new LinkedList<T>(); 
    public void addFirst(T e) { deque.addFirst(e); } 
    public void addLast(T e) { deque.addLast(e); } 
    public T getFirst() { return deque.getFirst(); } 
    public T getLast() { return deque.getLast(); } 
    public T removeFirst() { return deque.removeFirst(); } 
    public T removeLast() { return deque.removeLast(); } 
    public int size() { return deque.size(); } 
    public String toString() { return deque.toString(); } 
} 

 

Map

image

Object put(Object key,Object value)  
Object remove(Object key)
void putAll(Map mapping)  //将另外一个Map中的元素存入当前的Map中

Object get(Object key) 
boolean containsKey(Object key)  //判断Map中是否存在某键(key)
boolean containsValue(Object value) //判断Map中是否存在某值(value)

public Set keySet()  //返回所有的键(key), 用set, 不可重复
public Collection values() //返回所有的值(Value),用Collection, 可以重复
public Set entrySet() //返回一个实现 Map.Entry 接口的元素 Set

 

Set, 基于Map实现

和数学上的set概率是相同的, 最大特性是不允许有重复元素 
所以可以用来查同, 过滤等, 当然实现机制用hash来实现

Set的接口等同于collection的接口

常用的set操作, 
Union, s1.addAll(s2) 
Intersection, s1.retainAll(s2) 
补集, all.removeAll(set)

几种不同的set实现只是在于遍历顺序不同,

HashSet, 基于HashMap实现 
最常见的set, 遍历时无序

TreeSet, 基于红黑树实现 
遍历时, 元素有序, 所以成员要求实现Comparable接口,或者使用Comparator构造TreeSet

LinkedHashSet, 基于hash实现, 但是使用链表维护插入顺序 
可以以插入序进行遍历

 

Collection Utilities

java.util.Collections的静态方法

image image

 

String

String的不可变性, 任何更改操作, 其实都是创建新的String对象

String和char, int转化

String s = new String("asdfds");
char [] ch = s.toCharArray();
String s1 = ch.toString();

Integer i = new Integer (3);
s1 = i.toString();
int a = Integer.parseInt(s1);

方法

image image


本文章摘自博客园,原文发布日期:2013-09-30

目录
相关文章
|
4月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
126 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
4月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
69 1
|
4月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
64 1
|
4月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
53 2
|
4月前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
113 2
|
4月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
118 2
|
2月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
60 5
|
2月前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
64 3
|
3月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
69 6
|
3月前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。

热门文章

最新文章