在这种情况下,not interested
比/logout.php
优先吗?
Why is ArrayDeque better than LinkedList。
我认为,我应该使用LinkedList而不是ArrayDeque,因为有很多ArrayDeque
和LinkedList
该算法正在进行操作,并且没有对元素的随机访问。
poll
答案 0 :(得分:1)
在将ArrayDeque
和LinkedList
视为双端队列时,在LinkedList
和LinkedList
之间做出选择时要考虑很多折衷。
通常,LinkedList
类型具有以下优点:
通常,LinkedList
类型具有以下主要缺点:
ArrayDeque
中的元素不一定连续存储在内存中,因此ArrayDeque
的引用位置很差,访问可能会导致更多的缓存未命中,从而降低性能。通常,ArrayDeque
类型具有以下优点:
ArrayDeque
的引用位置很大,因此元素访问通常将创建很少的高速缓存未命中,从而带来出色的性能。通常,ArrayDeque
具有以下缺点:
ArrayDeque
上的n个操作的任何序列将花费时间O(n),但是当插入时超出数组容量时,LinkedList
可能必须执行O(n)才能复制元素。结果,每个操作ArrayDeque
的最坏情况下的性能要比ArrayDeque
慢。LinkedList
上的任何n序列操作都将花费时间O (n)。在您的特定用例中,由于您关心的只是级别顺序遍历的端到端效率,而不是从队列中单独添加或删除元素的成本,因此它可能会更快使用LinkedList
而不是ArrayDeque
。从某种意义上说,export class AppComponent implements AfterViewInit {
coordinates = [
{
x:10,
y:10,
label:'A'
},
{
x:10,
y:250,
label:'B'
},
{
x:250,
y:250,
label:'C'
},
{
x:250,
y:150,
label:'D'
},
{
x:400,
y:150,
label:'E'
},
{
x:400,
y:10,
label:'F'
}
]
/** Template reference to the canvas element */
@ViewChild('canvasEl') canvasRef: ElementRef;
/** Canvas 2d context */
private context: CanvasRenderingContext2D;
constructor() {}
ngAfterViewInit() {
this.setDummyRoofLayout();
}
setDummyRoofLayout() {
let ctx: CanvasRenderingContext2D = this.canvasRef.nativeElement.getContext(
'2d'
);
let ctx2: CanvasRenderingContext2D = this.canvasRef.nativeElement.getContext(
'2d'
);
let label: CanvasRenderingContext2D = this.canvasRef.nativeElement.getContext(
'2d'
);
ctx.strokeStyle = '#EE9723';
ctx.lineWidth = 2;
ctx.beginPath();
ctx2.beginPath();
ctx2.fillStyle = '#EE9723';
ctx2.arc(10, 10, 10, 0, 2 * Math.PI);
ctx2.fill();
ctx2.beginPath();
ctx2.arc(10, 250, 10, 0, 2 * Math.PI);
ctx2.fill();
ctx2.beginPath();
ctx2.arc(250, 250, 10, 0, 2 * Math.PI);
ctx2.fill();
ctx2.beginPath();
ctx2.arc(250, 150, 10, 0, 2 * Math.PI);
ctx2.fill();
ctx2.beginPath();
ctx2.arc(400, 150, 10, 0, 2 * Math.PI);
ctx2.fill();
ctx2.beginPath();
ctx2.arc(400, 10, 10, 0, 2 * Math.PI);
ctx2.fill();
ctx.moveTo(10, 10);
ctx.lineTo(10, 250);
ctx.lineTo(250, 250);
ctx.lineTo(250, 150);
ctx.lineTo(400, 150);
ctx.lineTo(400, 10);
ctx.lineTo(10, 10);
ctx.stroke();
label.beginPath();
label.moveTo(10, 10);
label.fillStyle = 'white';
label.textAlign = 'center';
label.textBaseline = 'middle';
label.font = '.75rem Arial';
label.fillText('A', 10, 10);
label.fillText('B', 10, 250);
label.fillText('C', 250, 250);
label.fillText('D', 250, 150);
label.fillText('E', 400, 150);
label.fillText('F', 400, 10);
label.stroke();
ctx.canvas.addEventListener(
'click',
this.onclick.bind(this)
);
}
onclick(e){
console.log(e);
let xAxis = e.layerX ;
let yAxis = e.layerY;
this.coordinates.forEach(element=>{
if(element.x+4 <xAxis && element.y+4>yAxis){
alert('label A clicked');
}
})
}
}][1]][1]
类型通常仅在需要在每个执行的操作上都具有良好的最坏情况下的性能时才更好,而在这里不是这种情况。当您只关心端到端运行时时,{0: {'Id': 'd1', 'name': 'elpato', 'email': '122as@gmail.com'}, 1: {'Id': 'd2', 'name': 'petoka', 'email': 'sss@gmail.com'}}
通常会表现得更好。
希望这会有所帮助!