import java.util.*;
public class IteratorDemo {
public static void main(String args[]) {
// Create an array list
ArrayList al = new ArrayList();
// add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
// Use iterator to display contents of al
System.out.print("Original contents of al: ");
Iterator itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
}
}
我不明白。如果al.iterator()
返回al
的第一个元素,为什么我在itr.next()
中放置element
(应该是我猜的第二个),然后打印element
它会打印第一个元素而不是第二个元素吗?
我是java的新手。与c / c ++并行,Iterator就像指针一样,Iterator.next()就像解引用指针一样?当我在代码中执行操作时,有人可以向我解释实际上在低级别发生了什么吗?
答案 0 :(得分:2)
调用iterator()
会返回列表中元素的迭代器,而不是第一个元素。事实上,如果这返回了第一个元素,那么条件while(itr.hasNext())
就没有任何意义。
只有当您调用next()
时,才会返回迭代中的下一个元素。
因此,如果你想排除第一个元素,那么你需要做:
if(itr.hasNext()) itr.next();
在循环之前。
另外,我建议您使用参数化类型而不是原始类型,即ArrayList
应声明为ArrayList<String> al = new ArrayList<>();
,迭代器应声明为Iterator<String> itr = al.iterator();
。
鉴于在这种情况下您想要做的就是将元素打印到控制台,根本不需要使用Iterator,因为它更容易做到:
al.forEach(element -> System.out.print(element + " "));
答案 1 :(得分:1)
al.iterator()不会返回al。的第一个元素。
你可以想象这张照片中的迭代器。方法iterator()提供了一个迭代器,以便您可以遍历列表的元素。当你调用它时,它不会给出第一个元素。每次调用next()方法时,它都会抓取下一个元素。这就是为什么当你第一次调用next()时它会给你第一个元素。
答案 2 :(得分:0)
<script type="text/javascript">
function clean_nick(nick) {
nick = nick.toLowerCase();
nick = nick.replace(/[^a-z]/g, "")
return nick;
}
function hash(nick) {
var cleaned = clean_nick(nick);
var h = 0;
for(var i = 0; i < cleaned.length; i++) {
var a = cleaned.charCodeAt(i)
var b = (h << 6)
var c = (h << 16)
var d = h
h = a + b + c - d;
}
console.log(h);
return h;
}
function get_color(nick) {
var nickhash = hash(nick);
var deg = nickhash % 360;
var h = deg < 0 ? 360 + deg : deg;
var l = 50;
if(h >= 30 && h <= 210) {
l = 30;
}
var s = 20 + Math.abs(nickhash) % 80;
return "hsl(" + h + "," + s + "%," + l + "%)";
}
console.log(get_color("kIrb-839432-`~#$%^&*()_+{}|:<>?/,'.;[]=-_-"));
</script>
(javadoc)将Iterator返回到集合(在本例中为您的ArrayList),而不是第一个元素。然后,您使用迭代器迭代集合的元素(使用//: Playground - noun: a place where people can play
import UIKit
extension Character {
func unicodeScalarCodePoint() -> UInt32 {
let characterString = String(self)
let scalars = characterString.unicodeScalars
return scalars[scalars.startIndex].value
}
}
func cleanNick(nick: String) -> String {
let lowerCaseNick = nick.lowercased()
let noNumberNick = lowerCaseNick.components(separatedBy: CharacterSet.decimalDigits).joined()
let noPunctuationNick = noNumberNick.components(separatedBy: CharacterSet.punctuationCharacters).joined()
let noSymbolNick = noPunctuationNick.components(separatedBy: CharacterSet.symbols).joined()
let finishedNick = noSymbolNick.replacingOccurrences(of: " ", with: "")
return finishedNick
}
func hash(nick: String) -> Int {
let cleaned = cleanNick(nick: nick)
var h = 0
for char in cleaned {
let a = char.unicodeScalarCodePoint()
let b = (h << 6)
let c = (h << 16)
let d = h
h = Int(Int(a) + Int(b) + Int(c) - Int(d))
}
print(h)
return h
}
func coloredNick(nick: String) -> String {
let nickHash = hash(nick: nick)
let deg = nickHash % 360
let h = deg < 0 ? 360 + deg : deg
var l = 50
if (h >= 30 && h <= 210) {
l = 30
}
let s = 20 + abs(nickHash) % 80
return "hsl(\(h),\(s),\(l))"
}
print(coloredNick(nick: "kIrb-839432-`~#$%^&*()_+{}|:<>?/,'.;[]=-_-"))
和let lastXcoVar = lastView.center.x
UIView.animateWithDuration(0.5, animations:
{
lastView.center.x = nextView.center.x
nextView.center.x = lastXcoVar
}) { _ in
self.stackview.exchangeSubviewAtIndex(<index of lastView>, withSubviewAtIndex: <index of nextView>)
}
)